Chiamate da servizio a servizio tramite l'identità utente delegato nel flusso on-behalf-ofService to service calls using delegated user identity in the On-Behalf-Of flow

Il flusso on-behalf-of di OAuth 2.0 viene usato quando un'applicazione richiama un servizio o un'API Web, che a sua volta deve chiamare un altro servizio o un'altra API Web.The OAuth 2.0 On-Behalf-Of flow serves the use case where an application invokes a service/web API, which in turn needs to call another service/web API. Lo scopo è di propagare l'identità utente delegato e le autorizzazioni attraverso la catena di richieste.The idea is to propagate the delegated user identity and permissions through the request chain. Per eseguire richieste autenticate al servizio downstream, il servizio di livello intermedio deve assicurarsi un token di accesso da Azure Active Directory (Azure AD) per conto dell'utente.For the middle-tier service to make authenticated requests to the downstream service, it needs to secure an access token from Azure Active Directory (Azure AD), on behalf of the user.

Diagramma del flusso on-behalf-ofOn-Behalf-Of flow diagram

Si supponga che l'utente sia stato autenticato in un'applicazione usando il flusso di concessione del codice di autorizzazione OAuth 2.0.Assume that the user has been authenticated on an application using the OAuth 2.0 authorization code grant flow. A questo punto, l'applicazione contiene un token di accesso (token A) con le richieste dell'utente e il consenso per accedere all'API Web di livello intermedio (API A).At this point, the application has an access token (token A) with the user’s claims and consent to access the middle-tier web API (API A). L'API A deve ora eseguire una richiesta autenticata all'API Web downstream (API B).Now, API A needs to make an authenticated request to the downstream web API (API B).

I passaggi che seguono costituiscono il flusso on-behalf-of e vengono descritti con l'aiuto del diagramma seguente.The steps that follow constitute the On-Behalf-Of flow and are explained with the help of the following diagram.

Flusso on-behalf-of di OAuth2.0

  1. L'applicazione client esegue una richiesta all'API A con il token A.The client application makes a request to API A with the token A.
  2. L'API A esegue l'autenticazione all'endpoint di rilascio del token di Azure AD e richiede un token per accedere all'API B.API A authenticates to the Azure AD token issuance endpoint and requests a token to access API B.
  3. L'endpoint di rilascio del token di Azure AD convalida le credenziali dell'API A con il token A ed emette il token di accesso per l'API B (token B).The Azure AD token issuance endpoint validates API A's credentials with token A and issues the access token for API B (token B).
  4. Il token B viene impostato nell'intestazione di autorizzazione della richiesta all'API B.The token B is set in the authorization header of the request to API B.
  5. I dati della risorsa protetta vengono restituiti dall'API B.Data from the secured resource is returned by API B.

Registrare l'applicazione e il servizio in Azure ADRegister the application and service in Azure AD

Registrare sia l'applicazione client che il servizio di livello intermedio in Azure AD.Register both the client application and the middle-tier service in Azure AD.

Registrare il servizio di livello intermedioRegister the middle-tier service

  1. Accedere al portale di Azure.Sign in to the Azure portal.
  2. Nella barra in alto fare clic sull'account e nell'elenco Directory scegliere il tenant di Active Directory in cui si vuole registrare l'applicazione.On the top bar, click on your account and under the Directory list, choose the Active Directory tenant where you wish to register your application.
  3. Fare clic su Altri servizi nella barra di spostamento a sinistra e scegliere Azure Active Directory.Click on More Services in the left hand nav, and choose Azure Active Directory.
  4. Fare clic su Registrazioni per l'app e scegliere Registrazione nuova applicazione.Click on App registrations and choose New application registration.
  5. Immettere un nome descrittivo per l'applicazione e selezionare il tipo di applicazione.Enter a friendly name for the application, and select the application type. In base al tipo di applicazione, impostare l'URL di accesso o l'URL di reindirizzamento sull'URL di base.Based on the application type set the sign-on URL or redirect URL to the base URL. Fare clic su Crea per creare l'applicazione.Click on Create to create the application.
  6. Sempre nel portale di Azure scegliere l'applicazione e fare clic su Impostazioni.While still in the Azure portal, choose your application and click on Settings. Nel menu Impostazioni scegliere Chiavi e aggiungere una chiave. Selezionare una durata della chiave di 1 o 2 anni.From the Settings menu, choose Keys and add a key - select a key duration of either 1 year or 2 years. Quando si salva la pagina, viene visualizzato il valore della chiave. È necessario copiare e salvare tale valore in un luogo sicuro in quanto servirà in seguito per configurare le impostazioni dell'applicazione nell'implementazione. Il valore della chiave non viene più visualizzato e non è in alcun modo recuperabile in un secondo momento, pertanto è necessario prenderne nota nel momento in cui è visibile nel portale di Azure.When you save this page, the key value will be displayed, copy and save the value in a safe location - you will need this key later to configure the application settings in your implementation - this key value will not be displayed again, nor retrievable by any other means, so please record it as soon as it is visible from the Azure Portal.

Registrare l'applicazione clientRegister the client application

  1. Accedere al portale di Azure.Sign in to the Azure portal.
  2. Nella barra in alto fare clic sull'account e nell'elenco Directory scegliere il tenant di Active Directory in cui si vuole registrare l'applicazione.On the top bar, click on your account and under the Directory list, choose the Active Directory tenant where you wish to register your application.
  3. Fare clic su Altri servizi nella barra di spostamento a sinistra e scegliere Azure Active Directory.Click on More Services in the left hand nav, and choose Azure Active Directory.
  4. Fare clic su Registrazioni per l'app e scegliere Registrazione nuova applicazione.Click on App registrations and choose New application registration.
  5. Immettere un nome descrittivo per l'applicazione e selezionare il tipo di applicazione.Enter a friendly name for the application, and select the application type. In base al tipo di applicazione, impostare l'URL di accesso o l'URL di reindirizzamento sull'URL di base.Based on the application type set the sign-on URL or redirect URL to the base URL. Fare clic su Crea per creare l'applicazione.Click on Create to create the application.
  6. Configurare le autorizzazioni per l'applicazione. Nel menu Impostazioni scegliere la sezione Autorizzazioni necessarie, fare clic su Aggiungi, quindi Selezionare un'API e digitare il nome del servizio di livello intermedio nella casella di testo.Configure Permissions for your application - in the Settings menu, choose the Required permissions section, click on Add, then Select an API, and type the name of the middle-tier service in the textbox. Fare quindi clic su Selezionare le autorizzazioni e selezionare "Accedi a nome servizio".Then, click on Select Permissions and select 'Access service name'.

Configurare applicazioni client noteConfigure known client applications

In questo scenario, il servizio di livello intermedio non ha alcuna interazione utente per ottenere il consenso dell'utente per accedere all'API downstream.In this scenario, the middle-tier service has no user interaction to obtain the user's consent to access the downstream API. La possibilità di concedere l'accesso all'API downstream deve quindi essere presentata in anticipo, come parte del passaggio relativo al consenso durante l'autenticazione.Therefore, the option to grant access to the downstream API must be presented upfront as a part of the consent step during authentication. Seguire a tale scopo la procedura sottostante per associare in modo esplicito la registrazione dell'app client in Azure AD con la registrazione del servizio di livello intermedio, che unisce il consenso richiesto sia dal client sia dal livello intermedio in una singola finestra di dialogo.To achieve this, follow the steps below to explicitly bind the client app's registration in Azure AD with the registration of the middle-tier service, which merges the consent required by both the client and middle-tier into a single dialog.

  1. Passare alla registrazione del servizio di livello intermedio e fare clic su Manifesto per aprire l'editor manifesto.Navigate to the middle-tier service registration, and click on Manifest to open the manifest editor.
  2. Nel manifesto individuare la proprietà di matrice knownClientApplications e aggiungere l'ID client dell'applicazione client come elemento.In the manifest, locate the knownClientApplications array property, and add the Client ID of the client application as an element.
  3. Salvare il manifesto facendo clic su Salva.Save the manifest by clicking the save button.

Richiesta del token di accesso da servizio a servizioService to service access token request

Per richiedere un token di accesso, eseguire una richiesta HTTP POST all'endpoint di Azure AD specifico del tenant con i parametri seguenti.To request an access token, make an HTTP POST to the tenant-specific Azure AD endpoint with the following parameters.

https://login.microsoftonline.com/<tenant>/oauth2/token

L'applicazione client può scegliere di essere protetta da un segreto condiviso oppure da un certificato.There are two cases depending on whether the client application chooses to be secured by a shared secret, or a certificate.

Primo caso: richiesta del token di accesso con un segreto condivisoFirst case: Access token request with a shared secret

Quando si usa un segreto condiviso, una richiesta di token di accesso da servizio a servizio contiene i parametri seguenti:When using a shared secret, a service-to-service access token request contains the following parameters:

ParametroParameter DescrizioneDescription
grant_typegrant_type Obbligatoriarequired Il tipo di richiesta del token.The type of the token request. Per una richiesta con un token JWT, il valore deve essere urn:ietf:params:oauth:grant-type:jwt-bearer.For a request using a JWT, the value must be urn:ietf:params:oauth:grant-type:jwt-bearer.
assertionassertion Obbligatoriarequired Il valore del token usato nella richiesta.The value of the token used in the request.
client_idclient_id Obbligatoriarequired L'ID app assegnato al servizio chiamante durante la registrazione con Azure AD.The App ID assigned to the calling service during registration with Azure AD. Per trovare l'ID app nel portale di gestione di Azure, fare clic su Active Directory, selezionare la directory e quindi fare clic sul nome dell'applicazione.To find the App ID in the Azure Management Portal, click Active Directory, click the directory, and then click the application name.
client_secretclient_secret Obbligatoriarequired La chiave registrata per il servizio chiamante in Azure AD.The key registered for the calling service in Azure AD. È necessario prendere nota di questo valore al momento della registrazione.This value should have been noted at the time of registration.
resourceresource Obbligatoriarequired L'URI dell'ID app del servizio ricevente (risorsa protetta).The App ID URI of the receiving service (secured resource). Per trovare l'URI dell'ID app, nel portale di gestione di Azure fare clic su Active Directory, selezionare la directory, fare clic sul nome dell'applicazione, scegliere Tutte le impostazioni e quindi fare clic su Proprietà.To find the App ID URI, in the Azure Management Portal, click Active Directory, click the directory, click the application name, click All settings and then click Properties.
requested_token_userequested_token_use Obbligatoriarequired Specifica la modalità di elaborazione della richiesta.Specifies how the request should be processed. Nel flusso on-behalf-of il valore deve essere on_behalf_of.In the On-Behalf-Of flow, the value must be on_behalf_of.
scopescope Obbligatoriarequired Un elenco di ambiti separati da spazi per la richiesta di token.A space separated list of scopes for the token request. Per OpenID Connect, è necessario specificare l'ambito openid.For OpenID Connect, the scope openid must be specified.

EsempioExample

La richiesta HTTP POST seguente richiede un token di accesso per l'API Web https://graph.windows.net.The following HTTP POST requests an access token for the https://graph.windows.net web API. client_id identifica il servizio che richiede il token di accesso.The client_id identifies the service that requests the access token.

// line breaks for legibility only

POST /oauth2/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer
&client_id=625391af-c675-43e5-8e44-edd3e30ceb15
&client_secret=0Y1W%2BY3yYb3d9N8vSjvm8WrGzVZaAaHbHHcGbcgG%2BoI%3D
&resource=https%3A%2F%2Fgraph.windows.net
&assertion=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCIsImtpZCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCJ9.eyJhdWQiOiJodHRwczovL2Rkb2JhbGlhbm91dGxvb2sub25taWNyb3NvZnQuY29tLzE5MjNmODYyLWU2ZGMtNDFhMy04MWRhLTgwMmJhZTAwYWY2ZCIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzI2MDM5Y2NlLTQ4OWQtNDAwMi04MjkzLTViMGM1MTM0ZWFjYi8iLCJpYXQiOjE0OTM0MjMxNTIsIm5iZiI6MTQ5MzQyMzE1MiwiZXhwIjoxNDkzNDY2NjUyLCJhY3IiOiIxIiwiYWlvIjoiWTJaZ1lCRFF2aTlVZEc0LzM0L3dpQndqbjhYeVp4YmR1TFhmVE1QeG8yYlN2elgreHBVQSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiJiMzE1MDA3OS03YmViLTQxN2YtYTA2YS0zZmRjNzhjMzI1NDUiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MzAyNDAwLCJmYW1pbHlfbmFtZSI6IlRlc3QiLCJnaXZlbl9uYW1lIjoiTmF2eWEiLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTc3IiwibmFtZSI6Ik5hdnlhIFRlc3QiLCJvaWQiOiIxY2Q0YmNhYy1iODA4LTQyM2EtOWUyZi04MjdmYmIxYmI3MzkiLCJwbGF0ZiI6IjMiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJzdWIiOiJEVXpYbkdKMDJIUk0zRW5pbDFxdjZCakxTNUllQy0tQ2ZpbzRxS1MzNEc4IiwidGlkIjoiMjYwMzljY2UtNDg5ZC00MDAyLTgyOTMtNWIwYzUxMzRlYWNiIiwidW5pcXVlX25hbWUiOiJuYXZ5YUBkZG9iYWxpYW5vdXRsb29rLm9ubWljcm9zb2Z0LmNvbSIsInVwbiI6Im5hdnlhQGRkb2JhbGlhbm91dGxvb2sub25taWNyb3NvZnQuY29tIiwidmVyIjoiMS4wIn0.R-Ke-XO7lK0r5uLwxB8g5CrcPAwRln5SccJCfEjU6IUqpqcjWcDzeDdNOySiVPDU_ZU5knJmzRCF8fcjFtPsaA4R7vdIEbDuOur15FXSvE8FvVSjP_49OH6hBYqoSUAslN3FMfbO6Z8YfCIY4tSOB2I6ahQ_x4ZWFWglC3w5mK-_4iX81bqi95eV4RUKefUuHhQDXtWhrSgIEC0YiluMvA4TnaJdLq_tWXIc4_Tq_KfpkvI004ONKgU7EAMEr1wZ4aDcJV2yf22gQ1sCSig6EGSTmmzDuEPsYiyd4NhidRZJP4HiiQh-hePBQsgcSgYGvz9wC6n57ufYKh2wm_Ti3Q
&requested_token_use=on_behalf_of
&scope=openid

Secondo caso: richiesta del token di accesso con un certificatoSecond case: Access token request with a certificate

Una richiesta di token di accesso da servizio a servizio con un certificato contiene i parametri seguenti:A service-to-service access token request with a certificate contains the following parameters:

ParametroParameter DescrizioneDescription
grant_typegrant_type Obbligatoriarequired Il tipo di richiesta del token.The type of the token request. Per una richiesta con un token JWT, il valore deve essere urn:ietf:params:oauth:grant-type:jwt-bearer.For a request using a JWT, the value must be urn:ietf:params:oauth:grant-type:jwt-bearer.
assertionassertion Obbligatoriarequired Il valore del token usato nella richiesta.The value of the token used in the request.
client_idclient_id Obbligatoriarequired L'ID app assegnato al servizio chiamante durante la registrazione con Azure AD.The App ID assigned to the calling service during registration with Azure AD. Per trovare l'ID app nel portale di gestione di Azure, fare clic su Active Directory, selezionare la directory e quindi fare clic sul nome dell'applicazione.To find the App ID in the Azure Management Portal, click Active Directory, click the directory, and then click the application name.
client_assertion_typeclient_assertion_type Obbligatoriarequired Il valore deve essere urn:ietf:params:oauth:client-assertion-type:jwt-bearer.The value must be urn:ietf:params:oauth:client-assertion-type:jwt-bearer
client_assertionclient_assertion Obbligatoriarequired Un'asserzione (un token JSON Web) che è necessario creare e firmare con il certificato registrato come credenziale per l'applicazione.An assertion (a JSON Web Token) that you need to create and sign with the certificate you registered as credentials for your application. Leggere l'articolo relativo alle credenziali basate su certificato per informazioni sulla registrazione del certificato e il formato dell'asserzione.Read about certificate credentials to learn how to register your certificate and the format of the assertion.
resourceresource Obbligatoriarequired L'URI dell'ID app del servizio ricevente (risorsa protetta).The App ID URI of the receiving service (secured resource). Per trovare l'URI dell'ID app, nel portale di gestione di Azure fare clic su Active Directory, selezionare la directory, fare clic sul nome dell'applicazione, scegliere Tutte le impostazioni e quindi fare clic su Proprietà.To find the App ID URI, in the Azure Management Portal, click Active Directory, click the directory, click the application name, click All settings and then click Properties.
requested_token_userequested_token_use Obbligatoriarequired Specifica la modalità di elaborazione della richiesta.Specifies how the request should be processed. Nel flusso on-behalf-of il valore deve essere on_behalf_of.In the On-Behalf-Of flow, the value must be on_behalf_of.
scopescope Obbligatoriarequired Un elenco di ambiti separati da spazi per la richiesta di token.A space separated list of scopes for the token request. Per OpenID Connect, è necessario specificare l'ambito openid.For OpenID Connect, the scope openid must be specified.

Si noti che i parametri sono quasi uguali a quelli usati nella richiesta tramite segreto condiviso, con l'eccezione del parametro client_secret che viene sostituito da due parametri: client_assertion_type e client_assertion.Notice that the parameters are almost the same as in the case of the request by shared secret except that the client_secret parameter is replaced by two parameters: a client_assertion_type and client_assertion.

EsempioExample

La richiesta HTTP POST seguente richiede un token di accesso per l'API Web https://graph.windows.net con un certificato.The following HTTP POST requests an access token for the https://graph.windows.net web API with a certificate. client_id identifica il servizio che richiede il token di accesso.The client_id identifies the service that requests the access token.

// line breaks for legibility only

POST /oauth2/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer
&client_id=625391af-c675-43e5-8e44-edd3e30ceb15
&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer
&client_assertion=eyJhbGciOiJSUzI1NiIsIng1dCI6Imd4OHRHeXN5amNScUtqRlBuZDdSRnd2d1pJMCJ9.eyJ{a lot of characters here}M8U3bSUKKJDEg
&resource=https%3A%2F%2Fgraph.windows.net
&assertion=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCIsImtpZCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCJ9.eyJhdWQiOiJodHRwczovL2Rkb2JhbGlhbm91dGxvb2sub25taWNyb3NvZnQuY29tLzE5MjNmODYyLWU2ZGMtNDFhMy04MWRhLTgwMmJhZTAwYWY2ZCIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzI2MDM5Y2NlLTQ4OWQtNDAwMi04MjkzLTViMGM1MTM0ZWFjYi8iLCJpYXQiOjE0OTM0MjMxNTIsIm5iZiI6MTQ5MzQyMzE1MiwiZXhwIjoxNDkzNDY2NjUyLCJhY3IiOiIxIiwiYWlvIjoiWTJaZ1lCRFF2aTlVZEc0LzM0L3dpQndqbjhYeVp4YmR1TFhmVE1QeG8yYlN2elgreHBVQSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiJiMzE1MDA3OS03YmViLTQxN2YtYTA2YS0zZmRjNzhjMzI1NDUiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MzAyNDAwLCJmYW1pbHlfbmFtZSI6IlRlc3QiLCJnaXZlbl9uYW1lIjoiTmF2eWEiLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTc3IiwibmFtZSI6Ik5hdnlhIFRlc3QiLCJvaWQiOiIxY2Q0YmNhYy1iODA4LTQyM2EtOWUyZi04MjdmYmIxYmI3MzkiLCJwbGF0ZiI6IjMiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJzdWIiOiJEVXpYbkdKMDJIUk0zRW5pbDFxdjZCakxTNUllQy0tQ2ZpbzRxS1MzNEc4IiwidGlkIjoiMjYwMzljY2UtNDg5ZC00MDAyLTgyOTMtNWIwYzUxMzRlYWNiIiwidW5pcXVlX25hbWUiOiJuYXZ5YUBkZG9iYWxpYW5vdXRsb29rLm9ubWljcm9zb2Z0LmNvbSIsInVwbiI6Im5hdnlhQGRkb2JhbGlhbm91dGxvb2sub25taWNyb3NvZnQuY29tIiwidmVyIjoiMS4wIn0.R-Ke-XO7lK0r5uLwxB8g5CrcPAwRln5SccJCfEjU6IUqpqcjWcDzeDdNOySiVPDU_ZU5knJmzRCF8fcjFtPsaA4R7vdIEbDuOur15FXSvE8FvVSjP_49OH6hBYqoSUAslN3FMfbO6Z8YfCIY4tSOB2I6ahQ_x4ZWFWglC3w5mK-_4iX81bqi95eV4RUKefUuHhQDXtWhrSgIEC0YiluMvA4TnaJdLq_tWXIc4_Tq_KfpkvI004ONKgU7EAMEr1wZ4aDcJV2yf22gQ1sCSig6EGSTmmzDuEPsYiyd4NhidRZJP4HiiQh-hePBQsgcSgYGvz9wC6n57ufYKh2wm_Ti3Q
&requested_token_use=on_behalf_of
&scope=openid

Risposta del token di accesso da servizio a servizioService to service access token response

Una risposta di esito positivo è una risposta OAuth 2.0 JSON con i parametri seguenti.A success response is a JSON OAuth 2.0 response with the following parameters.

ParametroParameter DescrizioneDescription
token_typetoken_type Indica il valore del tipo di token.Indicates the token type value. L'unico tipo supportato da Azure AD è Bearer.The only type that Azure AD supports is Bearer. Per altre informazioni sui token di connessione, vedere OAuth 2.0 Authorization Framework: Bearer Token Usage (RFC 6750)(Framework di autorizzazione di OAuth 2.0: uso dei token di connessione - RFC 6750).For more information about bearer tokens, see the OAuth 2.0 Authorization Framework: Bearer Token Usage (RFC 6750).
scopescope L'ambito di accesso concesso nel token.The scope of access granted in the token.
expires_inexpires_in Il periodo di validità del token di accesso (in secondi).The length of time the access token is valid (in seconds).
expires_onexpires_on Scadenza del token di accesso.The time when the access token expires. La data è rappresentata come numero di secondi da 1970-01-01T0:0:0Z UTC fino alla scadenza.The date is represented as the number of seconds from 1970-01-01T0:0:0Z UTC until the expiration time. Questo valore viene usato per determinare la durata dei token memorizzati nella cache.This value is used to determine the lifetime of cached tokens.
resourceresource L'URI dell'ID app del servizio ricevente (risorsa protetta).The App ID URI of the receiving service (secured resource).
access_tokenaccess_token Token di accesso richiesto.The requested access token. Il servizio chiamante può usare questo token per l'autenticazione nel servizio ricevente.The calling service can use this token to authenticate to the receiving service.
id_tokenid_token Il token ID richiesto.The requested id token. Il servizio chiamante può usarlo per verificare l'identità dell'utente e avviare una sessione con l'utente.The calling service can use this to verify the user's identity and begin a session with the user.
refresh_tokenrefresh_token Il token di aggiornamento per il token di accesso richiesto.The refresh token for the requested access token. Il servizio chiamante può usare questo token per richiedere un altro token di accesso dopo la scadenza di quello corrente.The calling service can use this token to request another access token after the current access token expires.

Esempio di risposta di esito positivoSuccess response example

L'esempio seguente mostra una risposta di esito positivo a una richiesta di token di accesso per l'API Web https://graph.windows.net.The following example shows a success response to a request for an access token for the https://graph.windows.net web API.

{
    "token_type":"Bearer",
    "scope":"User.Read",
    "expires_in":"43482",
    "ext_expires_in":"302683",
    "expires_on":"1493466951",
    "not_before":"1493423168",
    "resource":"https://graph.windows.net",
    "access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCIsImtpZCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCJ9.eyJhdWQiOiJodHRwczovL2dyYXBoLndpbmRvd3MubmV0IiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvMjYwMzljY2UtNDg5ZC00MDAyLTgyOTMtNWIwYzUxMzRlYWNiLyIsImlhdCI6MTQ5MzQyMzE2OCwibmJmIjoxNDkzNDIzMTY4LCJleHAiOjE0OTM0NjY5NTEsImFjciI6IjEiLCJhaW8iOiJBU1FBMi84REFBQUE1NnZGVmp0WlNjNWdBVWwrY1Z0VFpyM0VvV2NvZEoveWV1S2ZqcTZRdC9NPSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiI2MjUzOTFhZi1jNjc1LTQzZTUtOGU0NC1lZGQzZTMwY2ViMTUiLCJhcHBpZGFjciI6IjEiLCJlX2V4cCI6MzAyNjgzLCJmYW1pbHlfbmFtZSI6IlRlc3QiLCJnaXZlbl9uYW1lIjoiTmF2eWEiLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTc3IiwibmFtZSI6Ik5hdnlhIFRlc3QiLCJvaWQiOiIxY2Q0YmNhYy1iODA4LTQyM2EtOWUyZi04MjdmYmIxYmI3MzkiLCJwbGF0ZiI6IjMiLCJwdWlkIjoiMTAwMzNGRkZBMTJFRDdGRSIsInNjcCI6IlVzZXIuUmVhZCIsInN1YiI6IjNKTUlaSWJlYTc1R2hfWHdDN2ZzX0JDc3kxa1l1ekZKLTUyVm1Zd0JuM3ciLCJ0aWQiOiIyNjAzOWNjZS00ODlkLTQwMDItODI5My01YjBjNTEzNGVhY2IiLCJ1bmlxdWVfbmFtZSI6Im5hdnlhQGRkb2JhbGlhbm91dGxvb2sub25taWNyb3NvZnQuY29tIiwidXBuIjoibmF2eWFAZGRvYmFsaWFub3V0bG9vay5vbm1pY3Jvc29mdC5jb20iLCJ1dGkiOiJ4Q3dmemhhLVAwV0pRT0x4Q0dnS0FBIiwidmVyIjoiMS4wIn0.cqmUVjfVbqWsxJLUI1Z4FRx1mNQAHP-L0F4EMN09r8FY9bIKeO-0q1eTdP11Nkj_k4BmtaZsTcK_mUygdMqEp9AfyVyA1HYvokcgGCW_Z6DMlVGqlIU4ssEkL9abgl1REHElPhpwBFFBBenOk9iHddD1GddTn6vJbKC3qAaNM5VarjSPu50bVvCrqKNvFixTb5bbdnSz-Qr6n6ACiEimiI1aNOPR2DeKUyWBPaQcU5EAK0ef5IsVJC1yaYDlAcUYIILMDLCD9ebjsy0t9pj_7lvjzUSrbMdSCCdzCqez_MSNxrk1Nu9AecugkBYp3UVUZOIyythVrj6-sVvLZKUutQ",
    "refresh_token":"AQABAAAAAABnfiG-mA6NTae7CdWW7QfdjKGu9-t1scy_TDEmLi4eLQMjJGt_nAoVu6A4oSu1KsRiz8XyQIPKQxSGfbf2FoSK-hm2K8TYzbJuswYusQpJaHUQnSqEvdaCeFuqXHBv84wjFhuanzF9dQZB_Ng5za9xKlUENrNtlq9XuLNVKzxEyeUM7JyxzdY7JiEphWImwgOYf6II316d0Z6-H3oYsFezf4Xsjz-MOBYEov0P64UaB5nJMvDyApV-NWpgklLASfNoSPGb67Bc02aFRZrm4kLk-xTl6eKE6hSo0XU2z2t70stFJDxvNQobnvNHrAmBaHWPAcC3FGwFnBOojpZB2tzG1gLEbmdROVDp8kHEYAwnRK947Py12fJNKExUdN0njmXrKxNZ_fEM33LHW1Tf4kMX_GvNmbWHtBnIyG0w5emb-b54ef5AwV5_tGUeivTCCysgucEc-S7G8Cz0xNJ_BOiM_4bAv9iFmrm9STkltpz0-Tftg8WKmaJiC0xXj6uTf4ZkX79mJJIuuM7XP4ARIcLpkktyg2Iym9jcZqymRkGH2Rm9sxBwC4eeZXM7M5a7TJ-5CqOdfuE3sBPq40RdEWMFLcrAzFvP0VDR8NKHIrPR1AcUruat9DETmTNJukdlJN3O41nWdZOVoJM-uKN3uz2wQ2Ld1z0Mb9_6YfMox9KTJNzRzcL52r4V_y3kB6ekaOZ9wQ3HxGBQ4zFt-2U0mSszIAA",
    "id_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiI2MjUzOTFhZi1jNjc1LTQzZTUtOGU0NC1lZGQzZTMwY2ViMTUiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC8yNjAzOWNjZS00ODlkLTQwMDItODI5My01YjBjNTEzNGVhY2IvIiwiaWF0IjoxNDkzNDIzMTY4LCJuYmYiOjE0OTM0MjMxNjgsImV4cCI6MTQ5MzQ2Njk1MSwiYW1yIjpbInB3ZCJdLCJmYW1pbHlfbmFtZSI6IlRlc3QiLCJnaXZlbl9uYW1lIjoiTmF2eWEiLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTc3IiwibmFtZSI6Ik5hdnlhIFRlc3QiLCJvaWQiOiIxY2Q0YmNhYy1iODA4LTQyM2EtOWUyZi04MjdmYmIxYmI3MzkiLCJwbGF0ZiI6IjMiLCJzdWIiOiJEVXpYbkdKMDJIUk0zRW5pbDFxdjZCakxTNUllQy0tQ2ZpbzRxS1MzNEc4IiwidGlkIjoiMjYwMzljY2UtNDg5ZC00MDAyLTgyOTMtNWIwYzUxMzRlYWNiIiwidW5pcXVlX25hbWUiOiJuYXZ5YUBkZG9iYWxpYW5vdXRsb29rLm9ubWljcm9zb2Z0LmNvbSIsInVwbiI6Im5hdnlhQGRkb2JhbGlhbm91dGxvb2sub25taWNyb3NvZnQuY29tIiwidXRpIjoieEN3ZnpoYS1QMFdKUU9MeENHZ0tBQSIsInZlciI6IjEuMCJ9."
}

Esempio di risposta con erroreError response example

Quando si tenta di acquisire un token di accesso per l'API downstream, se questa dispone di criteri di accesso condizionale, ad esempio l'autenticazione a più fattori impostata, l'endpoint del token di Azure AD restituisce una risposta con errore.An error response is returned by Azure AD token endpoint when trying to acquire an access token for the downstream API, if the downstream API has a conditional access policy such as multi-factor authentication set on it. Il servizio di livello intermedio dovrebbe segnalare l'errore all'applicazione client in modo che questa possa fornire l'interazione dell'utente per soddisfare i criteri di accesso condizionale.The middle-tier service should surface this error to the client application so that the client application can provide the user interaction to satisfy the conditional access policy.

{
    "error":"interaction_required",
    "error_description":"AADSTS50079: Due to a configuration change made by your administrator, or because you moved to a new location, you must enroll in multi-factor authentication to access 'bf8d80f9-9098-4972-b203-500f535113b1'.\r\nTrace ID: b72a68c3-0926-4b8e-bc35-3150069c2800\r\nCorrelation ID: 73d656cf-54b1-4eb2-b429-26d8165a52d7\r\nTimestamp: 2017-05-01 22:43:20Z",
    "error_codes":[50079],
    "timestamp":"2017-05-01 22:43:20Z",
    "trace_id":"b72a68c3-0926-4b8e-bc35-3150069c2800",
    "correlation_id":"73d656cf-54b1-4eb2-b429-26d8165a52d7",
    "claims":"{\"access_token\":{\"polids\":{\"essential\":true,\"values\":[\"9ab03e19-ed42-4168-b6b7-7001fb3e933a\"]}}}"
}

Usare il token di accesso per accedere alla risorsa protettaUse the access token to access the secured resource

Il servizio di livello intermedio può ora usare il token acquisito in precedenza per eseguire richieste autenticate all'API Web downstream, impostando il token nell'intestazione Authorization.Now the middle-tier service can use the token acquired above to make authenticated requests to the downstream web API, by setting the token in the Authorization header.

EsempioExample

GET /me?api-version=2013-11-08 HTTP/1.1
Host: graph.windows.net
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCIsImtpZCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCJ9.eyJhdWQiOiJodHRwczovL2dyYXBoLndpbmRvd3MubmV0IiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvMjYwMzljY2UtNDg5ZC00MDAyLTgyOTMtNWIwYzUxMzRlYWNiLyIsImlhdCI6MTQ5MzQyMzE2OCwibmJmIjoxNDkzNDIzMTY4LCJleHAiOjE0OTM0NjY5NTEsImFjciI6IjEiLCJhaW8iOiJBU1FBMi84REFBQUE1NnZGVmp0WlNjNWdBVWwrY1Z0VFpyM0VvV2NvZEoveWV1S2ZqcTZRdC9NPSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiI2MjUzOTFhZi1jNjc1LTQzZTUtOGU0NC1lZGQzZTMwY2ViMTUiLCJhcHBpZGFjciI6IjEiLCJlX2V4cCI6MzAyNjgzLCJmYW1pbHlfbmFtZSI6IlRlc3QiLCJnaXZlbl9uYW1lIjoiTmF2eWEiLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTc3IiwibmFtZSI6Ik5hdnlhIFRlc3QiLCJvaWQiOiIxY2Q0YmNhYy1iODA4LTQyM2EtOWUyZi04MjdmYmIxYmI3MzkiLCJwbGF0ZiI6IjMiLCJwdWlkIjoiMTAwMzNGRkZBMTJFRDdGRSIsInNjcCI6IlVzZXIuUmVhZCIsInN1YiI6IjNKTUlaSWJlYTc1R2hfWHdDN2ZzX0JDc3kxa1l1ekZKLTUyVm1Zd0JuM3ciLCJ0aWQiOiIyNjAzOWNjZS00ODlkLTQwMDItODI5My01YjBjNTEzNGVhY2IiLCJ1bmlxdWVfbmFtZSI6Im5hdnlhQGRkb2JhbGlhbm91dGxvb2sub25taWNyb3NvZnQuY29tIiwidXBuIjoibmF2eWFAZGRvYmFsaWFub3V0bG9vay5vbm1pY3Jvc29mdC5jb20iLCJ1dGkiOiJ4Q3dmemhhLVAwV0pRT0x4Q0dnS0FBIiwidmVyIjoiMS4wIn0.cqmUVjfVbqWsxJLUI1Z4FRx1mNQAHP-L0F4EMN09r8FY9bIKeO-0q1eTdP11Nkj_k4BmtaZsTcK_mUygdMqEp9AfyVyA1HYvokcgGCW_Z6DMlVGqlIU4ssEkL9abgl1REHElPhpwBFFBBenOk9iHddD1GddTn6vJbKC3qAaNM5VarjSPu50bVvCrqKNvFixTb5bbdnSz-Qr6n6ACiEimiI1aNOPR2DeKUyWBPaQcU5EAK0ef5IsVJC1yaYDlAcUYIILMDLCD9ebjsy0t9pj_7lvjzUSrbMdSCCdzCqez_MSNxrk1Nu9AecugkBYp3UVUZOIyythVrj6-sVvLZKUutQ

Passaggi successiviNext steps

Altre informazioni sul protocollo OAuth 2.0 e su un altro modo per eseguire l'autenticazione da servizio a servizio usando le credenziali del client.Learn more about the OAuth 2.0 protocol and another way to perform service to service auth using client credentials.