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.
Il flusso OBO (On-behalf-of) descrive lo scenario di un'API Web che usa un'identità diversa dalla propria per chiamare un'altra API Web. Indicato come delega in OAuth, l'intento è quello di passare l'identità e le autorizzazioni di un utente tramite la catena di richieste.
Affinché il servizio di livello intermedio esegua richieste autenticate al servizio downstream, deve proteggere un token di accesso da Microsoft Identity Platform. Usa solo ambiti delegati e non ruoli applicazione. I ruoli rimangono associati all'entità (l'utente) e non all'applicazione che opera per conto dell'utente. Ciò si verifica per impedire all'utente di ottenere l'autorizzazione per le risorse a cui non deve avere accesso.
Questo articolo descrive come programmare direttamente con il protocollo nella tua applicazione. Quando possibile, è consigliabile usare le librerie di autenticazione Microsoft supportate (MSAL) per acquisire token e chiamare API Web protette. Vedere anche le app di esempio che usano MSAL per esempi.
Limitazioni del client
Se un'entità servizio ha richiesto un token solo app e l'ha inviata a un'API, tale API scambia un token che non rappresenta l'entità servizio originale. Questo perché il flusso OBO funziona solo per le entità utente. Al contrario, deve usare il flusso di credenziali client per ottenere un token solo app. Nel caso di app a pagina singola, è consigliabile passare un token di accesso a un client riservato di livello intermedio per eseguire i flussi OBO.
Se un client usa il flusso implicito per ottenere un id_token e include anche caratteri jolly in un URL di risposta, il id_token non può essere usato per un flusso OBO. Un carattere jolly è un URL che termina con un *
carattere . Ad esempio, se https://myapp.com/*
è l'URL di risposta non è possibile usare il id_token perché non è abbastanza specifico per identificare il client. In questo modo si impedisce l'emissione del token. Tuttavia, i token di accesso acquisiti tramite il flusso di concessione implicita vengono riscattati da un client riservato, anche se il client di avvio ha un URL di risposta con caratteri jolly registrato. Ciò è dovuto al fatto che il client riservato può identificare il client che ha acquisito il token di accesso. Il client riservato può quindi usare il token di accesso per acquisire un nuovo token di accesso per l'API downstream.
Inoltre, le applicazioni con chiavi di firma personalizzate non possono essere usate come API di livello intermedio nel flusso OBO. Sono incluse le applicazioni aziendali configurate per l'accesso Single Sign-On. Se l'API di livello intermedio usa una chiave di firma personalizzata, l'API downstream non convaliderà la firma del token di accesso passato. Ciò genera un errore perché i token firmati con una chiave controllata dal client non possono essere accettati in modo sicuro.
Diagramma del protocollo
Si supponga che l'utente abbia autenticato un'applicazione usando il flusso di concessione del codice di autorizzazione OAuth 2.0 o un altro flusso di accesso. A questo punto, l'applicazione ha un token di accesso per l'API A (token A) con le attestazioni dell'utente e il consenso per accedere all'API Web di livello intermedio (API A). L'API A deve ora effettuare una richiesta autenticata all'API Web downstream (API B).
I passaggi che seguono costituiscono il flusso OBO e vengono illustrati con l'aiuto del diagramma seguente.
- L'applicazione client effettua una richiesta all'API A con il token A (con un'attestazione dell'API
aud
A). - L'API A esegue l'autenticazione all'endpoint di rilascio dei token di Microsoft Identity Platform e richiede un token per accedere all'API B.
- L'endpoint di rilascio dei token di Microsoft Identity Platform convalida le credenziali dell'API A insieme al token A e rilascia il token di accesso per l'API B (token B) all'API A.
- Il token B viene impostato dall'API A nell'intestazione di autorizzazione della richiesta all'API B.
- I dati della risorsa protetta vengono restituiti dall'API B all'API A e quindi al client.
In questo scenario, il servizio di livello intermedio non ha alcuna interazione dell'utente per ottenere il consenso dell'utente per accedere all'API downstream. Di conseguenza, l'opzione per concedere l'accesso all'API downstream viene presentata in anticipo come parte del passaggio di consenso durante l'autenticazione. Per informazioni su come implementare questa funzionalità nell'app, vedere Acquisizione del consenso per l'applicazione di livello intermedio.
Richiesta di token di accesso di livello intermedio
Per richiedere un token di accesso, effettuare un POST HTTP all'endpoint del token di Microsoft Identity Platform specifico del tenant con i parametri seguenti.
https://login.microsoftonline.com/<tenant>/oauth2/v2.0/token
Avvertimento
DO NOT send access tokens that were issued to the middle tier to anywhere except the intended audience for the token.DO NOT send access token that were issued to the middle tier to anywhere except the intended audience for the token. I token di accesso rilasciati al livello intermedio sono destinati all'uso solo da tale livello intermedio per comunicare con l'endpoint del gruppo di destinatari previsto.
I rischi per la sicurezza dell'inoltro dei token di accesso da una risorsa di livello intermedio a un client (anziché ottenere i token di accesso stessi) includono:
- Maggiore rischio di intercettazione dei token sui canali SSL/TLS compromessi.
- Impossibilità di soddisfare l'associazione di token e gli scenari di accesso condizionale che richiedono l'attestazione (ad esempio, MFA, frequenza di accesso).
- Incompatibilità con i criteri basati su dispositivi configurati dall'amministratore (ad esempio, MDM, criteri basati sulla posizione).
Esistono due casi a seconda che l'applicazione client scelga di essere 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 |
---|---|---|
grant_type |
Obbligatorio | Tipo di richiesta di token. Per una richiesta che usa un token JWT, il valore deve essere urn:ietf:params:oauth:grant-type:jwt-bearer . |
client_id |
Obbligatorio | ID applicazione (client) assegnato alla tua app dall'interfaccia di amministrazione di Microsoft Entra - Registrazioni app. |
client_secret |
Obbligatorio | Segreto client generato per l'app nella pagina Registrazioni app dell'interfaccia di amministrazione di Microsoft Entra. È supportato anche il modello di autenticazione di base per fornire le credenziali nell'intestazione Autorizzazione, per RFC 6749 . |
assertion |
Obbligatorio | Token di accesso inviato all'API di livello intermedio. Questo token deve avere un'attestazione di destinatari (aud ) dell'app che effettua questa richiesta OBO (l'app indicata dal client-id campo). Le applicazioni non possono riscattare un token per un'app diversa, ad esempio se un client invia un token API destinato a Microsoft Graph, l'API non può riscattarla usando OBO. Deve invece rifiutare il token. |
scope |
Obbligatorio | Elenco di ambiti separati da spazi bianchi per la richiesta di token. Per altre informazioni, vedere Ambiti. |
requested_token_use |
Obbligatorio | Specifica la modalità di elaborazione della richiesta. Nel flusso OBO il valore deve essere impostato su on_behalf_of . |
Esempio
Il post HTTP seguente richiede un token di accesso e un token di aggiornamento con user.read
ambito per l'API https://graph.microsoft.com
Web. La richiesta viene firmata con il segreto client e viene effettuata da un client riservato.
//line breaks for legibility only
POST /oauth2/v2.0/token HTTP/1.1
Host: login.microsoftonline.com/<tenant>
Content-Type: application/x-www-form-urlencoded
grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
&client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&client_secret=sampleCredentia1s
&assertion=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCJ9.eyJhdWQiOiIyO{a lot of characters here}
&scope=https://graph.microsoft.com/user.read+offline_access
&requested_token_use=on_behalf_of
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 oltre ai parametri dell'esempio precedente:
Parametro | TIPO | Descrizione |
---|---|---|
grant_type |
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 . |
client_id |
Obbligatorio | ID applicazione (client) assegnato alla tua app dall'interfaccia di amministrazione di Microsoft Entra - Registrazioni app. |
client_assertion_type |
Obbligatorio | Il valore deve essere urn:ietf:params:oauth:client-assertion-type:jwt-bearer . |
client_assertion |
Obbligatorio | Un'asserzione (un token Web JSON) che è necessario creare e firmare con il certificato registrato come credenziali per l'applicazione. Per informazioni su come registrare il certificato e il formato dell'asserzione, vedere Credenziali del certificato. |
assertion |
Obbligatorio | Token di accesso inviato all'API di livello intermedio. Questo token deve avere un'attestazione di destinatari (aud ) dell'app che effettua questa richiesta OBO (l'app indicata dal client-id campo). Le applicazioni non possono riscattare un token per un'app diversa, ad esempio se un client invia un token API destinato a MS Graph, l'API non può riscattarla usando OBO. Deve invece rifiutare il token. |
requested_token_use |
Obbligatorio | Specifica la modalità di elaborazione della richiesta. Nel flusso OBO il valore deve essere impostato su on_behalf_of . |
scope |
Obbligatorio | Elenco di ambiti separati da spazi per la richiesta di token. Per altre informazioni, vedere Ambiti. |
Si noti che i parametri sono quasi uguali a quelli della richiesta tramite segreto condiviso, ad eccezione del fatto che il client_secret
parametro viene sostituito da due parametri: a client_assertion_type
e client_assertion
. Il client_assertion_type
parametro è impostato su urn:ietf:params:oauth:client-assertion-type:jwt-bearer
e il client_assertion
parametro è impostato sul token JWT firmato con la chiave privata del certificato.
Esempio
Il post HTTP seguente richiede un token di accesso con user.read
ambito per l'API https://graph.microsoft.com
Web con un certificato. La richiesta viene firmata con il segreto client e viene effettuata da un client riservato.
// line breaks for legibility only
POST /oauth2/v2.0/token HTTP/1.1
Host: login.microsoftonline.com/<tenant>
Content-Type: application/x-www-form-urlencoded
grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer
&client_id=11112222-bbbb-3333-cccc-4444dddd5555
&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer
&client_assertion=eyJhbGciOiJSUzI1NiIsIng1dCI6Imd4OHRHeXN5amNScUtqRlBuZDdSRnd2d1pJMCJ9.eyJ{a lot of characters here}
&assertion=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCIsImtpZCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCJ9.eyJhdWQiO{a lot of characters here}
&requested_token_use=on_behalf_of
&scope=https://graph.microsoft.com/user.read+offline_access
Risposta del token di accesso di livello intermedio
Una risposta di esito positivo è una risposta OAuth 2.0 JSON con i parametri seguenti.
Parametro | Descrizione |
---|---|
token_type |
Indica il valore del tipo di token. L'unico tipo supportato da Microsoft Identity Platform è Bearer . Per altre informazioni sui token di connessione, vedere OAuth 2.0 Authorization Framework: Bearer Token Usage (RFC 6750). |
scope |
Ambito di accesso concesso nel token. |
expires_in |
Periodo di tempo, espresso in secondi, per cui il token di accesso è valido. |
access_token |
Token di accesso richiesto. Il servizio chiamante può usare questo token per eseguire l'autenticazione al servizio ricevente. |
refresh_token |
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. Il token di aggiornamento viene fornito solo se è stato richiesto l'ambito offline_access . |
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
. La risposta contiene un token di accesso e un token di aggiornamento e viene firmato con la chiave privata del certificato.
{
"token_type": "Bearer",
"scope": "https://graph.microsoft.com/user.read",
"expires_in": 3269,
"ext_expires_in": 0,
"access_token": "eyJ0eXAiOiJKV1QiLCJub25jZSI6IkFRQUJBQUFBQUFCbmZpRy1tQTZOVGFlN0NkV1c3UWZkQ0NDYy0tY0hGa18wZE50MVEtc2loVzRMd2RwQVZISGpnTVdQZ0tQeVJIaGlDbUN2NkdyMEpmYmRfY1RmMUFxU21TcFJkVXVydVJqX3Nqd0JoN211eHlBQSIsImFsZyI6IlJTMjU2IiwieDV0IjoiejAzOXpkc0Z1aXpwQmZCVksxVG4yNVFIWU8wIiwia2lkIjoiejAzOXpkc0Z1aXpwQmZCVksxVG4yNVFIWU8wIn0.eyJhdWQiOiJodHRwczovL2dyYXBoLm1pY3Jvc29mdC5jb20iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC83MmY5ODhiZi04NmYxLTQxYWYtOTFhYi0yZDdjZDAxMWRiNDcvIiwiaWF0IjoxNDkzOTMwMzA1LCJuYmYiOjE0OTM5MzAzMDUsImV4cCI6MTQ5MzkzMzg3NSwiYWNyIjoiMCIsImFpbyI6IkFTUUEyLzhEQUFBQU9KYnFFWlRNTnEyZFcxYXpKN1RZMDlYeDdOT29EMkJEUlRWMXJ3b2ZRc1k9IiwiYW1yIjpbInB3ZCJdLCJhcHBfZGlzcGxheW5hbWUiOiJUb2RvRG90bmV0T2JvIiwiYXBwaWQiOiIyODQ2ZjcxYi1hN2E0LTQ5ODctYmFiMy03NjAwMzViMmYzODkiLCJhcHBpZGFjciI6IjEiLCJmYW1pbHlfbmFtZSI6IkNhbnVtYWxsYSIsImdpdmVuX25hbWUiOiJOYXZ5YSIsImlwYWRkciI6IjE2Ny4yMjAuMC4xOTkiLCJuYW1lIjoiTmF2eWEgQ2FudW1hbGxhIiwib2lkIjoiZDVlOTc5YzctM2QyZC00MmFmLThmMzAtNzI3ZGQ0YzJkMzgzIiwib25wcmVtX3NpZCI6IlMtMS01LTIxLTIxMjc1MjExODQtMTYwNDAxMjkyMC0xODg3OTI3NTI3LTI2MTE4NDg0IiwicGxhdGYiOiIxNCIsInB1aWQiOiIxMDAzM0ZGRkEwNkQxN0M5Iiwic2NwIjoiVXNlci5SZWFkIiwic3ViIjoibWtMMHBiLXlpMXQ1ckRGd2JTZ1JvTWxrZE52b3UzSjNWNm84UFE3alVCRSIsInRpZCI6IjcyZjk4OGJmLTg2ZjEtNDFhZi05MWFiLTJkN2NkMDExZGI0NyIsInVuaXF1ZV9uYW1lIjoibmFjYW51bWFAbWljcm9zb2Z0LmNvbSIsInVwbiI6Im5hY2FudW1hQG1pY3Jvc29mdC5jb20iLCJ1dGkiOiJWR1ItdmtEZlBFQ2M1dWFDaENRSkFBIiwidmVyIjoiMS4wIn0.cubh1L2VtruiiwF8ut1m9uNBmnUJeYx4x0G30F7CqSpzHj1Sv5DCgNZXyUz3pEiz77G8IfOF0_U5A_02k-xzwdYvtJUYGH3bFISzdqymiEGmdfCIRKl9KMeoo2llGv0ScCniIhr2U1yxTIkIpp092xcdaDt-2_2q_ql1Ha_HtjvTV1f9XR3t7_Id9bR5BqwVX5zPO7JMYDVhUZRx08eqZcC-F3wi0xd_5ND_mavMuxe2wrpF-EZviO3yg0QVRr59tE3AoWl8lSGpVc97vvRCnp4WVRk26jJhYXFPsdk4yWqOKZqzr3IFGyD08WizD_vPSrXcCPbZP3XWaoTUKZSNJg",
"refresh_token": "OAQABAAAAAABnfiG-mA6NTae7CdWW7QfdAALzDWjw6qSn4GUDfxWzJDZ6lk9qRw4An{a lot of characters here}"
}
Questo token di accesso è un token in formato v1.0 per Microsoft Graph. Questo perché il formato del token è basato sulla risorsa a cui si accede e non è correlato agli endpoint usati per richiederlo. Microsoft Graph è configurato per accettare token v1.0, quindi Microsoft Identity Platform produce token di accesso v1.0 quando un client richiede token per Microsoft Graph. Altre app possono indicare che vogliono token in formato v2.0, token in formato v1.0 o anche formati di token proprietari o crittografati. Entrambi gli endpoint v1.0 e v2.0 possono generare entrambi i formati di token. In questo modo, la risorsa può sempre ottenere il formato corretto del token indipendentemente dalla modalità o dalla posizione in cui il token viene richiesto dal client.
Avvertimento
Non tentare di convalidare o leggere i token per qualsiasi API di cui non si è proprietari, inclusi i token in questo esempio, nel codice. I token per i servizi Microsoft possono usare un formato speciale che non verrà convalidato come token JWT e potrebbe anche essere crittografato per gli utenti consumer (account Microsoft). Sebbene la lettura dei token sia uno strumento utile per il debug e l'apprendimento, è consigliabile non dipendere da questo per il codice o presupporre specifiche sui token che non sono per un'API che si controlla.
Esempio di risposta di errore
Quando si tenta di acquisire un token di accesso per l'API downstream, viene restituita una risposta di errore dall'endpoint del token, se l'API downstream ha un criterio 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.
Per restituire questo errore al client, il servizio di livello intermedio risponde con HTTP 401 Non autorizzato e con un'intestazione HTTP WWW-Authenticate contenente l'errore e la richiesta di attestazione. Il client deve analizzare questa intestazione e acquisire un nuovo token dall'autorità emittente del token, presentando la richiesta di attestazioni, se presente. I client non devono riprovare ad accedere al servizio di livello intermedio usando un token di accesso memorizzato nella cache.
{
"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 multifactor authentication to access 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb'.\r\nTrace ID: 0000aaaa-11bb-cccc-dd22-eeeeee333333\r\nCorrelation ID: aaaa0000-bb11-2222-33cc-444444dddddd\r\nTimestamp: 2017-05-01 22:43:20Z",
"error_codes":[50079],
"timestamp":"2017-05-01 22:43:20Z",
"trace_id":"0000aaaa-11bb-cccc-dd22-eeeeee333333",
"correlation_id":"aaaa0000-bb11-2222-33cc-444444dddddd",
"claims":"{\"access_token\":{\"polids\":{\"essential\":true,\"values\":[\"00aa00aa-bb11-cc22-dd33-44ee44ee44ee\"]}}}"
}
Usare il token di accesso per accedere alla risorsa protetta
Ora il servizio di livello intermedio può usare il token acquisito in precedenza per effettuare richieste autenticate all'API Web downstream impostando il token nell'intestazione Authorization
.
Esempio
GET /v1.0/me 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. Microsoft Entra ID 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.
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 Microsoft Entra ID. Per trovare l'ID app nell'interfaccia di amministrazione di Microsoft Entra, passare aRegistrazioni app > e quindi selezionare il nome dell'applicazione. |
segreto_cliente | Obbligatorio | Chiave registrata per il servizio chiamante in Microsoft Entra ID. Questo valore deve essere annotato al momento della registrazione. È supportato anche il modello di autenticazione di base per fornire le credenziali nell'intestazione Autorizzazione, per RFC 6749 . |
scopo | Obbligatorio | Elenco di ambiti separati da spazi per la richiesta di token. Per altre informazioni, vedere Ambiti. SAML non ha un concetto di ambiti, ma viene usato per identificare l'applicazione SAML di destinazione per cui si vuole ricevere un token. Per questo flusso OBO, il valore dell'ambito deve essere sempre l'ID entità SAML con /.default accodato. Ad esempio, nel caso in cui l'ID entità dell'applicazione SAML sia https://testapp.contoso.com , l'ambito richiesto deve essere https://testapp.contoso.com/.default . Nel caso in cui l'ID entità non inizi con uno schema URI, ad https: esempio , Microsoft Entra prefissi l'ID entità con spn: . In tal caso è necessario richiedere l'ambito spn:<EntityID>/.default , ad esempio spn:testapp/.default nel caso in cui l'ID entità sia testapp . Il valore di ambito richiesto qui determina l'elemento risultante Audience nel token SAML, che potrebbe essere importante per l'applicazione SAML che riceve il token. |
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 Base 64url.
-
SubjectConfirmationData per un'asserzione SAML originata da una chiamata OBO: se l'applicazione di destinazione richiede un
Recipient
valore inSubjectConfirmationData
, il valore deve essere configurato come primo URL di risposta nonwildcard nella configurazione dell'applicazione di risorse. Poiché l'URL di risposta predefinito non viene usato per determinare ilRecipient
valore, potrebbe essere necessario riordinare gli URL di risposta nella configurazione dell'applicazione per assicurarsi che venga usato il primo URL di risposta nonwildcard. Per altre informazioni, vedere URL di risposta. -
Nodo SubjectConfirmationData: il nodo non può contenere un
InResponseTo
attributo 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 unInResponseTo
attributo. -
Autorizzazioni API: è necessario aggiungere le autorizzazioni API necessarie per l'applicazione di livello intermedio per consentire l'accesso all'applicazione SAML, in modo che possa richiedere un token per l'ambito
/.default
dell'applicazione SAML. - Consenso: il consenso deve essere concesso per ricevere un token SAML contenente i dati utente in un flusso OAuth. Per informazioni, vedere Acquisizione del consenso per l'applicazione di livello intermedio.
Risposta con asserzione SAML
Parametro | Descrizione |
---|---|
tipo_di_token | Indica il valore del tipo di token. L'unico tipo supportato da Microsoft Entra ID è 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>
Ottenere il consenso per l'applicazione di livello intermedio
L'obiettivo del flusso OBO è garantire che venga fornito il consenso appropriato in modo che l'app client possa chiamare l'app di livello intermedio e l'app di livello intermedio abbia l'autorizzazione per chiamare la risorsa back-end. A seconda dell'architettura o dell'utilizzo dell'applicazione, è consigliabile considerare quanto segue per assicurarsi che il flusso OBO sia riuscito:
.default e consenso combinato
L'applicazione di livello intermedio aggiunge il client all'elenco di applicazioni client note (knownClientApplications
) nel manifesto. Se un prompt di consenso viene attivato dal client, il flusso di consenso è sia per se stesso che per l'applicazione di livello intermedio. In Microsoft Identity Platform questa operazione viene eseguita usando l'ambito.default
. L'ambito .default
è un ambito speciale usato per richiedere il consenso per accedere a tutti gli ambiti per cui l'applicazione dispone delle autorizzazioni. Ciò è utile quando l'applicazione deve accedere a più risorse, ma l'utente deve richiedere il consenso una sola volta.
Quando si attiva una schermata di consenso usando applicazioni client note e .default
, nella schermata di consenso vengono visualizzate le autorizzazioni sia per il client che per l'API di livello intermedio, sia per richiedere le autorizzazioni richieste dall'API di livello intermedio. L'utente fornisce il consenso per entrambe le applicazioni e quindi funziona il flusso OBO.
Il servizio risorse (API) identificato nella richiesta deve essere l'API per cui l'applicazione client richiede un token di accesso in seguito all'accesso dell'utente. Ad esempio, scope=openid https://middle-tier-api.example.com/.default
(per richiedere un token di accesso per l'API di livello intermedio) o scope=openid offline_access .default
(quando una risorsa non viene identificata, per impostazione predefinita è Microsoft Graph).
Indipendentemente dall'API identificata nella richiesta di autorizzazione, la richiesta di consenso viene combinata con tutte le autorizzazioni necessarie configurate per l'app client. Sono incluse anche tutte le autorizzazioni necessarie configurate per ogni API di livello intermedio elencato nell'elenco delle autorizzazioni necessarie del client, che ha identificato il client come applicazione client nota.
Importante
Sebbene sia valida per l'uso scope=openid https://resource/.default
in flussi di consenso combinati che coinvolgono applicazioni client note, non è necessario combinare .default
altri ambiti delegati come User.Read
, Mail.Read
, profile
o User.ReadWrite.All
nella stessa richiesta. Ciò genererà AADSTS70011
errori perché .default
rappresenta le autorizzazioni statiche con consenso preliminare, mentre le altre richiedono il consenso utente dinamico in fase di esecuzione.
offline_access
a volte viene accettato con .default
per abilitare i token di aggiornamento, ma non deve essere combinato con altri ambiti delegati. In caso di dubbio, suddividere le richieste di token per evitare conflitti di tipo ambito.
Applicazioni pre-autorizzate
Le risorse possono indicare che una determinata applicazione ha sempre l'autorizzazione per ricevere determinati ambiti. Ciò è utile per stabilire connessioni tra un client front-end e una risorsa back-end più semplice. Una risorsa può dichiarare più applicazioni pre-autorizzate (preAuthorizedApplications
) nel relativo manifesto. Qualsiasi applicazione può richiedere queste autorizzazioni in un flusso OBO e riceverle senza il consenso dell'utente.
Consenso dell'amministratore
Un amministratore tenant può garantire che le applicazioni dispongano dell'autorizzazione per chiamare le API necessarie fornendo il consenso amministratore per l'applicazione di livello intermedio. A tale scopo, l'amministratore può trovare l'applicazione di livello intermedio nel tenant, aprire la pagina delle autorizzazioni necessarie e scegliere di concedere l'autorizzazione per l'app. Per altre informazioni sul consenso amministratore, vedere la documentazione relativa al consenso e alle autorizzazioni.
Uso di una singola applicazione
In alcuni scenari, è possibile avere un'unica coppia di client front-end e di livello intermedio. In questo scenario, è possibile trovare più facilmente questa singola applicazione, negando completamente la necessità di un'applicazione di livello intermedio. Per eseguire l'autenticazione tra il front-end e l'API Web, è possibile usare cookie, un id_token o un token di accesso richiesto per l'applicazione stessa. Richiedere quindi il consenso da questa singola applicazione alla risorsa back-end.
Vedere anche
Altre informazioni sul protocollo OAuth 2.0 e un altro modo per eseguire l'autenticazione da servizio a servizio usando le credenziali client.