Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Avvertimento
Questo contenuto riguarda l'endpoint di Azure AD v1.0 precedente. Usare l' Microsoft Identity Platform per i nuovi progetti.
Il flusso OAuth 2.0 On-Behalf-Of (OBO) consente a un'applicazione che richiama un servizio o un'API Web per passare l'autenticazione utente a un altro servizio o API Web. Il flusso OBO propaga l'identità e le autorizzazioni dell'utente delegate attraverso la catena di richieste. Affinché il servizio di livello intermedio esegua richieste autenticate al servizio downstream, deve proteggere un token di accesso da Azure Active Directory (Azure AD) per conto dell'utente.
Importante
A partire da maggio 2018, non è possibile usare un id_token per il flusso on-Behalf-Of. Le app a pagina singola devono passare un token di accesso a un client riservato di livello intermedio per eseguire flussi OBO. Per ulteriori dettagli sui client che possono eseguire on-Behalf-Of chiamate, vedere le limitazioni .
Diagramma di flusso On-Behalf-Of
Il flusso OBO viene avviato dopo che l'utente è stato autenticato su un'applicazione che utilizza il flusso di concessione del codice di autorizzazione OAuth 2.0 . A questo punto, l'applicazione invia un token di accesso (token A) all'API Web di livello intermedio (API A) contenente le attestazioni dell'utente e il consenso per accedere all'API A. L'API A effettua quindi una richiesta autenticata all'API Web downstream (API B).
Questi passaggi costituiscono il flusso on-Behalf-Of: 
- L'applicazione client effettua una richiesta all'API A con il token A.
- L'API A esegue l'autenticazione all'endpoint di rilascio dei token di Azure AD e richiede un token per accedere all'API B.
- L'endpoint di rilascio del token di Azure AD convalida le credenziali dell'API A con il token A e rilascia il token di accesso per l'API B (token B).
- La richiesta all'API B contiene il token B nell'intestazione dell'autorizzazione.
- L'API B restituisce dati dalla risorsa protetta.
Nota
L'attestazione del gruppo di destinatari in un token di accesso usato per richiedere un token per un servizio downstream deve essere l'ID del servizio che effettua la richiesta OBO. Il token deve anche essere firmato con la chiave di firma globale di Azure Active Directory, ovvero l'impostazione predefinita per le applicazioni registrate tramite registrazioni app nel portale.
Registrare l'applicazione e il servizio in Azure AD
Registrare sia il servizio di livello intermedio che l'applicazione client in Azure AD.
Registrare il servizio di livello intermedio
- Accedere al portale di Azure.
- Nella barra superiore selezionare l'account e cercare nell'elenco Directory per selezionare un tenant di Active Directory per l'applicazione.
- Selezionare Altri servizi nel riquadro sinistro e scegliere Azure Active Directory.
- Selezionare Registrazioni app e quindi Nuova registrazione.
- Immettere un nome descrittivo per l'applicazione e selezionare il tipo di applicazione.
- In Tipi di account supportati selezionare Account in qualsiasi directory organizzativa e account Microsoft personali.
- Impostare l'URI di reindirizzamento sull'URL di base.
- Selezionare Registra per creare l'applicazione.
- Nel portale di Azure scegliere l'applicazione e selezionare Certificati e segreti.
- Selezionare Nuovo segreto client e aggiungere un segreto con una durata di un anno o due anni.
- Quando si salva questa pagina, il portale di Azure visualizza il valore del segreto. Copiare e salvare il valore del segreto in una posizione sicura.
- Creare un ambito nell'applicazione nella pagina Esporre un'API per l'app e fare clic su "Aggiungi un ambito". Il portale potrebbe richiedere anche di creare un URI ID applicazione.
Importante
È necessario il segreto per configurare le impostazioni dell'applicazione nell'implementazione. Questo valore del segreto non viene visualizzato di nuovo e non è recuperabile da altri mezzi. Registrarlo non appena è visibile nel portale di Azure.
Registrare l'applicazione client
- Accedere al portale di Azure.
- Nella barra superiore selezionare l'account e cercare nell'elenco Directory per selezionare un tenant di Active Directory per l'applicazione.
- Selezionare Altri servizi nel riquadro sinistro e scegliere Azure Active Directory.
- Selezionare Registrazioni app e quindi Nuova registrazione.
- Immettere un nome descrittivo per l'applicazione e selezionare il tipo di applicazione.
- In Tipi di account supportati selezionare Account in qualsiasi directory organizzativa e account Microsoft personali.
- Impostare l'URI di reindirizzamento sull'URL di base.
- Selezionare Registra per creare l'applicazione.
- Configurare le autorizzazioni per l'applicazione. In Autorizzazioni API selezionare Aggiungi un'autorizzazione e quindi API personali.
- Digitare il nome del servizio di livello intermedio nel campo di testo.
- Scegliere Seleziona autorizzazioni e quindi selezionare l'ambito creato nell'ultimo passaggio della registrazione del livello intermedio.
Configurare applicazioni client note
In questo scenario, il servizio di livello intermedio deve ottenere il consenso dell'utente per accedere all'API downstream senza l'interazione dell'utente. L'opzione per concedere l'accesso all'API downstream deve essere presentata in anticipo come parte del passaggio di consenso durante l'autenticazione.
Seguire questa procedura per associare in modo esplicito la registrazione dell'app client in Azure AD alla registrazione del servizio di livello intermedio. Questa operazione unisce il consenso richiesto sia dal client che dal livello intermedio in un'unica finestra di dialogo.
- Passare alla registrazione del servizio di livello intermedio e selezionare Manifesto per aprire l'editor del manifesto.
- Trova la proprietà dell'array
knownClientApplicationse aggiungi l'ID del cliente dell'applicazione client come elemento. - Salvare il manifesto selezionando Salva.
Richiesta di token di accesso da servizio a servizio
Per richiedere un token di accesso, effettuare un HTTP POST per l'endpoint di Azure AD specifico del tenant con i parametri seguenti:
https://login.microsoftonline.com/<tenant>/oauth2/token
L'applicazione client è protetta da un segreto condiviso o da un certificato.
Primo caso: richiesta di token di accesso con un segreto condiviso
Quando si usa un segreto condiviso, una richiesta di token di accesso da servizio a servizio contiene i parametri seguenti:
| Parametro | TIPO | Descrizione |
|---|---|---|
| tipo_di_concessione | Obbligatorio | Tipo della richiesta di token. Una richiesta OBO usa un token JSON Web (JWT), quindi il valore deve essere urn:ietf:params:oauth:grant-type:jwt-bearer. |
| asserzione | Obbligatorio | Valore del token di accesso usato nella richiesta. |
| ID cliente | Obbligatorio | ID app assegnato al servizio chiamante durante la registrazione con Azure AD. Per trovare l'ID app nel portale di Azure, selezionare Active Directory, scegliere la directory e quindi selezionare il nome dell'applicazione. |
| segreto_cliente | Obbligatorio | Chiave registrata per il servizio chiamante in Azure AD. Questo valore dovrebbe essere stato annotato al momento della registrazione. |
| risorsa | Obbligatorio | URI ID app del servizio ricevente (risorsa protetta). Per trovare l'URI ID app nel portale di Azure, selezionare Active Directory e scegliere la directory. Selezionare il nome dell'applicazione, scegliere Tutte le impostazioni e quindi proprietà. |
| uso_del_token_richiesto | Obbligatorio | Specifica la modalità di elaborazione della richiesta. Nel flusso On-Behalf-Of, il valore deve essere on_behalf_of. |
| scopo | Obbligatorio | Elenco di ambiti separati da spazi bianchi per la richiesta di token. Per OpenID Connect, è necessario specificare l'oggetto scope openid . |
Esempio
Il post HTTP seguente richiede un token di accesso per l'API Web https://graph.microsoft.com. Il client_id identifica il servizio che richiede il token di accesso.
// 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.microsoft.com
&assertion=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCIsImtpZCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCJ9.ewogICJhdWQiOiAiaHR0cHM6Ly9ncmFwaC5taWNyb3NvZnQuY29tIiwKICAiaXNzIjogImh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzI2MDM5Y2NlLTQ4OWQtNDAwMi04MjkzLTViMGM1MTM0ZWFjYi8iLAogICJpYXQiOiAxNDkzNDIzMTY4LAogICJuYmYiOiAxNDkzNDIzMTY4LAogICJleHAiOiAxNDkzNDY2OTUxLAogICJhY3IiOiAiMSIsCiAgImFpbyI6ICJBU1FBMi84REFBQUE1NnZGVmp0WlNjNWdBVWwrY1Z0VFpyM0VvV2NvZEoveWV1S2ZqcTZRdC9NPSIsCiAgImFtciI6IFsKICAgICJwd2QiCiAgXSwKICAiYXBwaWQiOiAiNjI1MzkxYWYtYzY3NS00M2U1LThlNDQtZWRkM2UzMGNlYjE1IiwKICAiYXBwaWRhY3IiOiAiMSIsCiAgImVfZXhwIjogMzAyNjgzLAogICJmYW1pbHlfbmFtZSI6ICJUZXN0IiwKICAiZ2l2ZW5fbmFtZSI6ICJOYXZ5YSIsCiAgImlwYWRkciI6ICIxNjcuMjIwLjEuMTc3IiwKICAibmFtZSI6ICJOYXZ5YSBUZXN0IiwKICAib2lkIjogIjFjZDRiY2FjLWI4MDgtNDIzYS05ZTJmLTgyN2ZiYjFiYjczOSIsCiAgInBsYXRmIjogIjMiLAogICJwdWlkIjogIjEwMDMzRkZGQTEyRUQ3RkUiLAogICJzY3AiOiAiVXNlci5SZWFkIiwKICAic3ViIjogIjNKTUlaSWJlYTc1R2hfWHdDN2ZzX0JDc3kxa1l1ekZKLTUyVm1Zd0JuM3ciLAogICJ0aWQiOiAiMjYwMzljY2UtNDg5ZC00MDAyLTgyOTMtNWIwYzUxMzRlYWNiIiwKICAidW5pcXVlX25hbWUiOiAibmF2eWFAZGRvYmFsaWFub3V0bG9vay5vbm1pY3Jvc29mdC5jb20iLAogICJ1cG4iOiAibmF2eWFAZGRvYmFsaWFub3V0bG9vay5vbm1pY3Jvc29mdC5jb20iLAogICJ1dGkiOiAieEN3ZnpoYS1QMFdKUU9MeENHZ0tBQSIsCiAgInZlciI6ICIxLjAiCn0.cqmUVjfVbqWsxJLUI1Z4FRx1mNQAHP-L0F4EMN09r8FY9bIKeO-0q1eTdP11Nkj_k4BmtaZsTcK_mUygdMqEp9AfyVyA1HYvokcgGCW_Z6DMlVGqlIU4ssEkL9abgl1REHElPhpwBFFBBenOk9iHddD1GddTn6vJbKC3qAaNM5VarjSPu50bVvCrqKNvFixTb5bbdnSz-Qr6n6ACiEimiI1aNOPR2DeKUyWBPaQcU5EAK0ef5IsVJC1yaYDlAcUYIILMDLCD9ebjsy0t9pj_7lvjzUSrbMdSCCdzCqez_MSNxrk1Nu9AecugkBYp3UVUZOIyythVrj6-sVvLZKUutQ
&requested_token_use=on_behalf_of
&scope=openid
Secondo caso: richiesta di token di accesso con un certificato
Una richiesta di token di accesso da servizio a servizio con un certificato contiene i parametri seguenti:
| Parametro | TIPO | Descrizione |
|---|---|---|
| tipo_di_concessione | Obbligatorio | Tipo della richiesta di token. Una richiesta OBO usa un token di accesso JWT, quindi il valore deve essere urn:ietf:params:oauth:grant-type:jwt-bearer. |
| asserzione | Obbligatorio | Valore del token usato nella richiesta. |
| ID cliente | Obbligatorio | ID app assegnato al servizio chiamante durante la registrazione con Azure AD. Per trovare l'ID app nel portale di Azure, selezionare Active Directory, scegliere la directory e quindi selezionare il nome dell'applicazione. |
| tipo_di_assertion_cliente | Obbligatorio | Il valore deve essere urn:ietf:params:oauth:client-assertion-type:jwt-bearer |
| asserzione_cliente | Obbligatorio | Un token Web JSON che hai creato e firmato con il certificato che hai registrato come le credenziali per la tua applicazione. Vedere le credenziali del certificato per informazioni sul formato dell'asserzione e su come registrare il certificato. |
| risorsa | Obbligatorio | URI ID app del servizio ricevente (risorsa protetta). Per trovare l'URI ID app nel portale di Azure, selezionare Active Directory e scegliere la directory. Selezionare il nome dell'applicazione, scegliere Tutte le impostazioni e quindi proprietà. |
| uso_del_token_richiesto | Obbligatorio | Specifica la modalità di elaborazione della richiesta. Nel flusso On-Behalf-Of, il valore deve essere on_behalf_of. |
| scopo | Obbligatorio | Elenco di ambiti separati da spazi bianchi per la richiesta di token. Per OpenID Connect, è necessario specificare l'oggetto scope openid . |
Questi parametri sono quasi uguali a quelli della richiesta tramite segreto condiviso, ad eccezione del fatto che il client_secret parameter viene sostituito da due parametri: client_assertion_type e client_assertion.
Esempio
Http POST seguente richiede un token di accesso per l'API Web https://graph.microsoft.com con un certificato. Il client_id identifica il servizio che richiede il token di accesso.
// 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.microsoft.com
&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 servizio
Una risposta di esito positivo è una risposta OAuth 2.0 JSON con i parametri seguenti:
| Parametro | Descrizione |
|---|---|
| tipo_di_token | Indica il valore del tipo di token. L'unico tipo supportato da Azure AD è Bearer. Per altre informazioni sui token di connessione, vedere OAuth 2.0 Authorization Framework: Bearer Token Usage (RFC 6750). |
| scopo | Ambito di accesso concesso nel token. |
| scade_in | Periodo di validità del token di accesso (in secondi). |
| scade_il | Ora di scadenza del token di accesso. La data è rappresentata come numero di secondi dal 1970-01-01T0:0:0Z UTC fino all'ora di scadenza. Questo valore viene usato per determinare la durata dei token memorizzati nella cache. |
| risorsa | URI ID app del servizio ricevente (risorsa protetta). |
| token di accesso | Token di accesso richiesto. Il servizio chiamante può usare questo token per eseguire l'autenticazione al servizio ricevente. |
| id_token (token di identificazione) | Token ID richiesto. Il servizio chiamante può usare questo token per verificare l'identità dell'utente e iniziare una sessione con l'utente. |
| token di aggiornamento | Token di aggiornamento per il token di accesso richiesto. Il servizio chiamante può usare questo token per richiedere un altro token di accesso dopo la scadenza del token di accesso corrente. |
Esempio di risposta riuscita
L'esempio seguente mostra una risposta di esito positivo a una richiesta di un token di accesso per l'API Web https://graph.microsoft.com.
{
"token_type":"Bearer",
"scope":"User.Read",
"expires_in":"43482",
"ext_expires_in":"302683",
"expires_on":"1493466951",
"not_before":"1493423168",
"resource":"https://graph.microsoft.com",
"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 di errore
L'endpoint del token di Azure AD restituisce una risposta di errore quando tenta di acquisire un token di accesso per un'API downstream impostata con criteri di accesso condizionale, ad esempio l'autenticazione a più fattori. Il servizio di livello intermedio deve visualizzare questo errore all'applicazione client in modo che l'applicazione client possa fornire l'interazione dell'utente per soddisfare i criteri di accesso condizionale.
{
"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 protetta
Il servizio di livello intermedio può usare il token di accesso acquisito per effettuare richieste autenticate all'API Web downstream impostando il token nell'intestazione Authorization.
Esempio
GET /me?api-version=2013-11-08 HTTP/1.1
Host: graph.microsoft.com
Authorization: Bearer eyJ0eXAiO ... 0X2tnSQLEANnSPHY0gKcgw
Asserzioni SAML ottenute mediante un flusso OBO di OAuth2.0
Alcuni servizi Web basati su OAuth devono accedere ad altre API del servizio Web che accettano asserzioni SAML in flussi non interattivi. Azure Active Directory può fornire un'asserzione SAML in risposta a un flusso on-Behalf-Of che usa un servizio Web basato su SAML come risorsa di destinazione.
Nota
Si tratta di un'estensione non standard per il flusso on-Behalf-Of OAuth 2.0 che consente a un'applicazione basata su OAuth2 di accedere agli endpoint API del servizio Web che usano token SAML.
Suggerimento
Quando si chiama un servizio Web protetto da SAML da un'applicazione Web front-end, è sufficiente chiamare l'API e avviare un normale flusso di autenticazione interattiva con la sessione esistente dell'utente. È necessario usare un flusso OBO solo quando una chiamata da servizio a servizio richiede un token SAML per fornire il contesto utente.
Ottenere un token SAML usando una richiesta OBO con un segreto condiviso
Una richiesta da servizio a servizio per un'asserzione SAML contiene i parametri seguenti:
| Parametro | TIPO | Descrizione |
|---|---|---|
| tipo_di_concessione | Obbligatorio | Tipo della richiesta di token. Per una richiesta che usa un token JWT, il valore deve essere urn:ietf:params:oauth:grant-type:jwt-bearer. |
| asserzione | Obbligatorio | Valore del token di accesso usato nella richiesta. |
| ID cliente | Obbligatorio | ID app assegnato al servizio chiamante durante la registrazione con Azure AD. Per trovare l'ID app nel portale di Azure, selezionare Active Directory, scegliere la directory e quindi selezionare il nome dell'applicazione. |
| segreto_cliente | Obbligatorio | Chiave registrata per il servizio chiamante in Azure AD. Questo valore dovrebbe essere stato annotato al momento della registrazione. |
| risorsa | Obbligatorio | URI ID app del servizio ricevente (risorsa protetta). Si tratta della risorsa che sarà il gruppo di destinatari del token SAML. Per trovare l'URI ID app nel portale di Azure, selezionare Active Directory e scegliere la directory. Selezionare il nome dell'applicazione, scegliere Tutte le impostazioni e quindi proprietà. |
| uso_del_token_richiesto | Obbligatorio | Specifica la modalità di elaborazione della richiesta. Nel flusso On-Behalf-Of, il valore deve essere on_behalf_of. |
| Tipo_di_token_richiesto | Obbligatorio | Specifica il tipo di token richiesto. Il valore può essere urn:ietf:params:oauth:token-type:saml2 o urn:ietf:params:oauth:token-type:saml1 a seconda dei requisiti della risorsa a cui si accede. |
La risposta contiene un token SAML codificato in UTF8 e Base64url.
SubjectConfirmationData per un'asserzione SAML originata da una chiamata OBO: Se l'applicazione di destinazione richiede un valore del destinatario in SubjectConfirmationData, il valore deve essere un URL di risposta non generico nella configurazione dell'applicazione di risorsa.
Nodo SubjectConfirmationData: il nodo non può contenere un attributo InResponseTo perché non fa parte di una risposta SAML. L'applicazione che riceve il token SAML deve essere in grado di accettare l'asserzione SAML senza un attributo InResponseTo .
Consenso: il consenso deve essere stato concesso per ricevere un token SAML contenente i dati utente in un flusso OAuth. Per informazioni sulle autorizzazioni e sul recupero del consenso dell'amministratore, vedere Autorizzazioni e consenso nell'endpoint di Azure Active Directory v1.0.
Risposta con asserzione SAML
| Parametro | Descrizione |
|---|---|
| tipo_di_token | Indica il valore del tipo di token. L'unico tipo supportato da Azure AD è Bearer. Per altre informazioni sui token di connessione, vedere OAuth 2.0 Authorization Framework: Bearer Token Usage (RFC 6750).For more information about bearer tokens, see OAuth 2.0 Authorization Framework: Bearer Token Usage (RFC 6750). |
| scopo | Ambito di accesso concesso nel token. |
| scade_in | Periodo di validità del token di accesso (in secondi). |
| scade_il | Ora di scadenza del token di accesso. La data è rappresentata come numero di secondi dal 1970-01-01T0:0:0Z UTC fino all'ora di scadenza. Questo valore viene usato per determinare la durata dei token memorizzati nella cache. |
| risorsa | URI ID app del servizio ricevente (risorsa protetta). |
| token di accesso | Parametro che restituisce l'asserzione SAML. |
| token di aggiornamento | Token di aggiornamento. Il servizio chiamante può usare questo token per richiedere un altro token di accesso dopo la scadenza dell'asserzione SAML corrente. |
- token_type: Bearer
- scade_in: 3296
- durata_estesa_scade_in: 0
- scade_il: 1529627844
- risorsa:
https://api.contoso.com - access_token: <asserzione SAML>
- issued_token_type: urn:ietf:params:oauth:token-type:saml2
- refresh_token: <token di aggiornamento>
Limitazioni del client
I client pubblici con URL di risposta con caratteri jolly non possono usare un id_token per i flussi OBO. Tuttavia, un client riservato può comunque riscattare i token di accesso acquisiti tramite il flusso di concessione implicita anche se il client pubblico ha un URI di reindirizzamento con caratteri jolly registrato.
Passaggi successivi
Altre informazioni sul protocollo OAuth 2.0 e un altro modo per eseguire l'autenticazione da servizio a servizio che usa le credenziali client: