Chiamare un'app API Web ASP.NET Core con cURL
Questo articolo illustra come chiamare un'API Web ASP.NET Core protetta usando l'URL client (cURL). cURL è uno strumento da riga di comando usato dagli sviluppatori per trasferire i dati da e verso un server. In questo articolo, viene registrata un'app Web e un'API Web in un tenant. L'app Web viene usata per ottenere un token di accesso generato da Microsoft Identity Platform. Successivamente, viene usato il token per effettuare una chiamata autorizzata all'API Web usando cURL.
Questo articolo illustra come chiamare un'API Web ASP.NET Core protetta usando l'URL client (cURL). cURL è uno strumento da riga di comando usato dagli sviluppatori per trasferire i dati da e verso un server. Seguendo l'esempio dell'Esercitazione: implementare un endpoint protetto nell'API, in cui è stata creata un'API protetta, è necessario registrare un'applicazione Web con Microsoft Identity Platform per generare un token di accesso. Successivamente, viene usato il token per effettuare una chiamata autorizzata all'API usando cURL.
Prerequisiti
- Un account Azure con una sottoscrizione attiva. Creare un account gratuitamente.
- Questo account di Azure deve disporre delle autorizzazioni per gestire le applicazioni. Uno dei seguenti ruoli di Microsoft Entra include le autorizzazioni necessarie:
- Amministratore di applicazioni
- Sviluppatore di applicazioni
- Amministratore di applicazioni cloud
- Scaricare e installare cURL sul computer workstation.
- Requisito minimo di .NET 8.0 SDK.
- Un account Azure con una sottoscrizione attiva. Creare un account gratuitamente.
- Questo account di Azure deve disporre delle autorizzazioni per gestire le applicazioni. Uno dei seguenti ruoli di Microsoft Entra include le autorizzazioni necessarie:
- Amministratore di applicazioni
- Sviluppatore di applicazioni
- Amministratore di applicazioni cloud
- Completamento della serie di esercitazioni:
- Scaricare e installare cURL sul computer workstation.
Registrare un'applicazione con Microsoft Identity Platform
Microsoft Identity Platform richiede la registrazione dell'applicazione prima di poter fornire servizi di gestione delle identità e degli accessi. La registrazione dell'applicazione consente di specificare il nome, il tipo dell'applicazione e il gruppo di destinatari dell'accesso. I destinatari dell'accesso specificano i tipi di account utente autorizzati ad accedere a una determinata applicazione.
Registrare l'API Web
Suggerimento
La procedura descritta in questo articolo può variare leggermente in base al portale di partenza.
Seguire questa procedura per creare la registrazione API Web:
Accedere all'interfaccia di amministrazione di Microsoft Entra almeno come Sviluppatore di applicazioni.
Se si ha accesso a più tenant, usare l'icona Impostazioni nel menu in alto per passare al tenant in cui si vuole registrare l'applicazione dal menu Directory e sottoscrizioni.
Passare a Identità>Applicazioni>Registrazioni app.
Seleziona Nuova registrazione.
Immettere un nome per l'applicazione, ad esempio NewWebAPI1.
Per Tipi di account supportati selezionare Account solo in questa directory dell'organizzazione. Per informazioni sui diversi tipi di account selezionare l'opzione Suggerimenti per la scelta.
Selezionare Registra.
Al termine della registrazione viene visualizzato il riquadro Panoramica dell'applicazione. Registrare l'ID directory (tenant) e l'ID applicazione (client) da usare nel codice sorgente dell'applicazione.
Nota
I Tipi di account supportati possono essere modificati facendo riferimento a Modificare gli account supportati da un'applicazione.
Esporre l'API
Dopo aver registrato l'API, è possibile configurarne l'autorizzazione definendo gli ambiti esposti dall'API alle applicazioni client. Le applicazioni client richiedono l'autorizzazione per eseguire operazioni passando un token di accesso insieme alle relative richieste all'API Web protetta. L'API Web esegue quindi l'operazione richiesta solo se il token di accesso ricevuto è valido.
In Gestisci selezionare Esporre un'API > Aggiungi un ambito . Accettare l'URI ID applicazione
(api://{clientId})
proposto selezionando Salva e continua.{clientId}
è il valore registrato dalla pagina Panoramica. Immettere quindi le informazioni seguenti:- Per Nome ambito, immettere
Forecast.Read
. - Per Utenti che possono fornire il consenso assicurarsi che sia selezionata l'opzione Amministratori e utenti.
- Nella casella Nome visualizzato del consenso amministratore immettere
Read forecast data
. - Nella casella di Descrizione del consenso amministratore immettere
Allows the application to read weather forecast data
. - Nella casella Nome visualizzato del consenso utente immettere
Read forecast data
. - Nella casella di Descrizione del consenso utente immettere
Allows the application to read weather forecast data
. - Assicurarsi che lo Stato sia impostato su Abilitato.
- Per Nome ambito, immettere
Seleziona Aggiungi ambito. Se l'ambito è stato immesso correttamente, verrà elencato nel riquadro Esponi un'API.
Registrare l'app Web
La sola presenza di un'API Web non è sufficiente; è necessaria anche un'app Web per ottenere un token di accesso all'API creata.
Seguire questa procedura per creare una registrazione dell'app Web:
- Selezionare Home per tornare alla pagina iniziale. Passare a Identità>Applicazioni>Registrazioni app.
- Selezionare Nuova registrazione.
- Immettere un Nome per l'applicazione, ad esempio
web-app-calls-web-api
. - Per Tipi di account supportati selezionare Account solo in questa directory dell'organizzazione. Per informazioni sui diversi tipi di account selezionare l'opzione Suggerimenti per la scelta.
- In URI di reindirizzamento (facoltativo), selezionare Web, quindi immettere
http://localhost
nella casella URL. - Selezionare Registra.
- Accedere all'interfaccia di amministrazione di Microsoft Entra almeno come Sviluppatore di applicazioni.
- Se si ha accesso a più tenant, usare l'icona Impostazioni nel menu in alto per passare al tenant in cui si vuole registrare l'applicazione dal menu Directory e sottoscrizioni.
- Passare a Identità>Applicazioni>Registrazioni app.
- Selezionare Nuova registrazione.
- Immettere un Nome per l'applicazione, ad esempio
web-app-calls-web-api
. - Per Tipi di account supportati selezionare Account solo in questa directory dell'organizzazione. Per informazioni sui diversi tipi di account selezionare l'opzione Suggerimenti per la scelta.
- In URI di reindirizzamento (facoltativo), selezionare Web, quindi immettere
http://localhost
nella casella URL. - Selezionare Registra.
Al termine della registrazione, la registrazione app verrà visualizzata nel riquadro Panoramica. Registrare ID directory (tenant) e ID applicazione (client) da usare nei passaggi successivi.
Aggiungere un segreto client
Un segreto client è un valore stringa che l'app può usare per identificarsi e a volte viene denominato password dell'applicazione. L'applicazione Web usa il segreto client per dimostrare la propria identità al momento della richiesta dei token.
Seguire questa procedura per configurare un segreto client:
Dal pannello Panoramica, in Gestisci, selezionare Certificati e segreti>Segreti client>Nuovo segreto client.
Aggiungere una descrizione per il segreto clienti, ad esempio Il mio segreto client.
Selezionare una scadenza per il segreto o specificare una durata personalizzata.
- La durata del segreto client è limitata a due anni (24 mesi) o meno. Non è possibile specificare una durata personalizzata di più di 24 mesi.
- Microsoft consiglia di impostare un valore di scadenza inferiore a 12 mesi.
Selezionare Aggiungi.
Assicurarsi di registrare il Valore del segreto client. Questo valore del segreto non viene mai più visualizzato dopo aver lasciato questa pagina.
Aggiungere autorizzazioni dell'applicazione per consentire l'accesso ad API Web
Specificando gli ambiti di un'API Web nella registrazione dell'app Web, l'app Web può ottenere da Microsoft Identity Platform un token di accesso contenente gli ambiti. All'interno del codice, l'API Web può quindi fornire accesso basato su autorizzazioni alle relative risorse in base agli ambiti trovati nel token di accesso.
Seguire questa procedura per configurare le autorizzazioni dell'app Web per l'API Web:
- Dal riquadro Panoramica dell'applicazione Web (web-app-that-calls-web-api), in Gestisci, selezionare Autorizzazioni API>Aggiungi un'autorizzazione>API usate dall'organizzazione.
- Selezionare NewWebAPI1 o l'API a cui si desidera aggiungere le autorizzazioni.
- In Seleziona autorizzazioni, selezionare la casella accanto a Forecast.Read. Potrebbe essere necessario espandere l'elenco Autorizzazioni . In questo modo vengono selezionate le autorizzazioni che l'applicazione client deve disporre per conto dell'utente che ha effettuato l'accesso.
- Selezionare Aggiungi autorizzazioni per completare il processo.
Dopo aver aggiunto le autorizzazioni per l'API, le autorizzazioni selezionate verranno visualizzate in Autorizzazioni configurate.
È possibile che sia presente anche l'autorizzazione User.Read per l'API di Microsoft Graph. Questa autorizzazione viene aggiunta automaticamente quando si registra un'app.
Testare l'API Web
Clonare il repository ms-identity-docs-code-dotnet.
git clone https://github.com/Azure-Samples/ms-identity-docs-code-dotnet.git
Passare alla cartella
ms-identity-docs-code-dotnet/web-api
e aprire il file./appsettings.json
, sostituire{APPLICATION_CLIENT_ID}
e{DIRECTORY_TENANT_ID}
con:{APPLICATION_CLIENT_ID}
è l'ID applicazione (client) dell'API Web nel riquadro Panoramica dell'app Registrazioni app.{DIRECTORY_TENANT_ID}
è l'ID directory (tenant) dell'API Web nel riquadro Panoramica dell'app Registrazioni app.
Eseguire il comando seguente per avviare l'app:
Verrà visualizzato un output simile al seguente. Registrare il numero di porta nell'URL
https://localhost:{port}
.... info: Microsoft.Hosting.Lifetime[14] Now listening on: https://localhost:{port} ...
Testare l'API Web
Passare all'API Web creata in Esercitazione: creare un progetto ASP.NET Core e configurare l'API, ad esempio NewWebAPILocal e aprire la cartella.
Aprire una nuova finestra del terminale e passare alla cartella in cui si trova il progetto di API Web.
Verrà visualizzato un output simile al seguente. Registrare il numero di porta nell'URL
https://localhost:{port}
.... info: Microsoft.Hosting.Lifetime[14] Now listening on: https://localhost:{port} ...
Richiedere un codice di autorizzazione
Il flusso del codice di autorizzazione ha inizio con il client che indirizza l'utente all'endpoint /authorize
. In questa richiesta, il client richiede l'autorizzazione Forecast.Read
dall'utente.
https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/authorize?client_id={web-app-calls-web-api_application_client_id}&response_type=code&redirect_uri=http://localhost&response_mode=query&scope=api://{web_API_application_client_id}/Forecast.Read
Copiare l'URL, sostituire i parametri seguenti e incollarlo nel browser:
{tenant_id}
è l'ID directory (tenant) dell'app Web.{web-app-calls-web-api_application_client_id}
è l'ID applicazione (client) nel riquadro Panoramica dell'app Web (web-app-calls-web-api).{web_API_application_client_id}
è l'ID applicazione (client) nel riquadro Panoramica dell'API Web (NewWebAPI1).
Accedere come un utente nel tenant di Microsoft Entra in cui vengono registrate le app. Fornire il consenso a qualsiasi richiesta di accesso, se necessario.
Il browser verrà reindirizzato a
http://localhost/
. Fare riferimento alla barra di spostamento del browser e copiare{authorization_code}
da usare nei passaggi seguenti. L'URL assume la forma del frammento di codice seguente:http://localhost/?code={authorization_code}
Usare un codice di autorizzazione e cURL per ottenere un token di accesso
cURL può ora essere usato per richiedere un token di accesso da Microsoft Identity Platform.
Copiare il comando cURL nel frammento di codice seguente. Sostituire i valori tra parentesi con i seguenti parametri del terminale. Assicurarsi di rimuovere le parentesi:
curl -X POST https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token \ -d 'client_id={web-app-calls-web-api_application_client_id}' \ -d 'api://{web_API_application_client_id}/Forecast.Read' \ -d 'code={authorization_code}&session_state={web-app-calls-web-api_application_client_id}' \ -d 'redirect_uri=http://localhost' \ -d 'grant_type=authorization_code' \ -d 'client_secret={client_secret}'
{tenant_id}
è l'ID directory (tenant) dell'app Web.client_id={web-app-calls-web-api_application_client_id}
esession_state={web-app-calls-web-api_application_client_id}
è l'ID applicazione (client) nel pannello Panoramica dell'applicazione Web (web-app-calls-web-api).api://{web_API_application_client_id}/Forecast.Read
è l'ID applicazione (client) nel riquadro Panoramica dell'API Web (NewWebAPI1).code={authorization_code}
è il codice di autorizzazione ricevuto in Richiedi un codice di autorizzazione. Ciò consente allo strumento cURL di richiedere un token di accesso.client_secret={client_secret}
è il Valore del segreto client registrato in Aggiungi un segreto client.
Eseguire il comando cURL e, se inserito correttamente, verrà restituita una risposta JSON simile al seguente output:
{ "token_type": "Bearer", "scope": "api://{web_API_application_client_id}/Forecast.Read", "expires_in": 3600, "ext_expires_in": 3600, "access_token": "{access_token}" }
Chiamare l'API Web con il token di accesso
Eseguendo il comando cURL precedente, Microsoft Identity Platform ha fornito un token di accesso. Il token acquisito può ora essere usato come bearer token in una richiesta HTTP per chiamare l'API Web.
Per chiamare l'API web, copiare il seguente comando cURL, sostituire i valori tra parentesi e incollarlo nel terminale:
curl -X GET https://localhost:{port}/weatherforecast -ki \ -H 'Content-Type: application/json' \ -H "Authorization: Bearer {access_token}"
{access_token}
il valore del token di accesso registrato dall'output JSON nella sezione precedente.{port}
il numero di porta dell'API Web registrato durante l'esecuzione dell'API nel terminale. Assicurarsi che sia il numero di portahttps
.
Con un token di accesso valido incluso nella richiesta, la risposta prevista è
HTTP/2 200
con output simile al seguente:HTTP/2 200 content-type: application/json; charset=utf-8 date: Day, DD Month YYYY HH:MM:SS server: Kestrel [{"date":"YYYY-MM-DDTHH:MM:SS","temperatureC":36,"summary":"Hot","temperatureF":96},{"date":"YYYY-MM-DDTHH:MM:SS","temperatureC":43,"summary":"Warm","temperatureF":109},{"date":"YYYY-MM-DDTHH:MM:SS","temperatureC":18,"summary":"Warm","temperatureF":64},{"date":"YYYY-MM-DDTHH:MM:SS","temperatureC":50,"summary":"Chilly","temperatureF":121},{"date":"YYYY-MM-DDTHH:MM:SS","temperatureC":3,"summary":"Bracing","temperatureF":37}]
Passaggi successivi
Per ulteriori informazioni sul flusso del codice di autorizzazione OAuth 2.0 e sui tipi di applicazione, consultare: