Chiamate da servizio a servizio mediante le credenziali client (certificato o segreto condiviso)
Avviso
Questo contenuto riguarda l'endpoint di Azure AD v1.0 meno recente. Per i nuovi progetti, usare Microsoft Identity Platform.
Il flusso di concessione delle credenziali client OAuth 2.0 consente a un servizio Web, (client riservato) di usare le proprie credenziali, invece di rappresentare un utente, per l'autenticazione durante la chiamata a un altro servizio Web. In questo scenario il client è in genere un servizio Web di livello intermedio, un servizio daemon o un sito Web. Per un livello più elevato di sicurezza, Azure AD consente al servizio chiamante di usare anche un certificato (invece di un segreto condiviso) come credenziale.
Diagramma del flusso di concessione delle credenziali client
Il diagramma seguente illustra il funzionamento del flusso di concessione delle credenziali client in Azure Active Directory (Azure AD).
- L'applicazione client esegue l'autenticazione in corrispondenza dell'endpoint di emissione del token di Azure AD e richiede un token di accesso.
- L'endpoint di emissione del token di Azure AD emette il token di accesso.
- Il token di accesso viene usato per l'autenticazione nella risorsa protetta.
- I dati della risorsa protetta vengono restituiti all'applicazione client.
Registrare i servizi in Azure AD
Registrare il servizio chiamante e il servizio ricevente in Azure Active Directory (Azure AD). Per altre informazioni, vedere Integrazione di applicazioni con Azure Active Directory.
Richiedere un token di accesso
Per richiedere un token di accesso, usare una richiesta HTTP POST per l'endpoint di Azure AD specifico del tenant.
https://login.microsoftonline.com/<tenant id>/oauth2/token
Richiesta del token di accesso da servizio a servizio
L'applicazione client può scegliere di essere protetta da un segreto condiviso oppure da un certificato.
Primo caso: richiesta del token di accesso con un segreto condiviso
Quando viene usato un segreto condiviso, una richiesta di token di accesso da servizio a servizio contiene i parametri seguenti:
Parametro | Tipo | Descrizione |
---|---|---|
grant_type | obbligatorio | Specifica il tipo di concessione richiesto. In un flusso di concessione delle credenziali client il valore deve essere client_credentials. |
client_id | obbligatorio | Specifica l'ID client di Azure AD del servizio Web chiamante. Per trovare l'ID client dell'applicazione chiamante, nel portale di Azure fare clic su Azure Active Directory, fare clic su Registrazioni per l'app e fare clic sull'applicazione. client_id è l'ID applicazione. |
client_secret | obbligatorio | Immettere una chiave registrata per l'applicazione daemon o il servizio Web chiamante in Azure AD. Per creare una chiave, nel portale di Azure fare clic su Azure Active Directory, fare clic su Registrazioni per l'app, fare clic sull'applicazione, fare clic su Impostazioni, fare clic su Chiavi e aggiungere una chiave. Quando si fornisce il segreto codificarlo come URL. |
resource | obbligatorio | Immettere l'URI ID app del servizio Web ricevente. Per trovare l'URI dell'ID app, nel portale di Azure fare clic su Azure Active Directory, fare clic su Registrazioni per l'app, fare clic sull'applicazione di servizio e quindi fare clic su Impostazioni e su Proprietà. |
Esempio
La richiesta HTTP POST seguente richiede un token di accesso per il servizio Web https://service.contoso.com/
.
client_id
identifica il servizio Web che richiede il token di accesso.
POST /contoso.com/oauth2/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials&client_id=625bc9f6-3bf6-4b6d-94ba-e97cf07a22de&client_secret=qkDwDJlDfig2IpeuUZYKH1Wb8q1V0ju6sILxQQqhJ+s=&resource=https%3A%2F%2Fservice.contoso.com%2F
Secondo caso: richiesta del 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 |
---|---|---|
grant_type | obbligatorio | Specifica il tipo di risposta richiesto. In un flusso di concessione delle credenziali client il valore deve essere client_credentials. |
client_id | obbligatorio | Specifica l'ID client di Azure AD del servizio Web chiamante. Per trovare l'ID client dell'applicazione chiamante, nel portale di Azure fare clic su Azure Active Directory, fare clic su Registrazioni per l'app e fare clic sull'applicazione. client_id è l'ID applicazione. |
client_assertion_type | obbligatorio | Il valore deve essere urn:ietf:params:oauth:client-assertion-type:jwt-bearer . |
client_assertion | obbligatorio | Un'asserzione (un token JSON Web) che è necessario creare e firmare con il certificato registrato come credenziale per l'applicazione. Leggere l'articolo relativo alle credenziali basate su certificato per informazioni sulla registrazione del certificato e il formato dell'asserzione. |
resource | obbligatorio | Immettere l'URI ID app del servizio Web ricevente. Per trovare l'URI dell'ID app, nel portale di Azure fare clic su Azure Active Directory, fare clic su Registrazioni per l'app, fare clic sull'applicazione di servizio e quindi fare clic su Impostazioni e su Proprietà. |
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.
Esempio
La richiesta HTTP POST seguente richiede un token di accesso per il servizio Web https://service.contoso.com/
con un certificato.
client_id
identifica il servizio Web che richiede il token di accesso.
POST /<tenant_id>/oauth2/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
resource=https%3A%2F%contoso.onmicrosoft.com%2Ffc7664b4-cdd6-43e1-9365-c2e1c4e1b3bf&client_id=97e0a5b7-d745-40b6-94fe-5f77d35c6e05&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer&client_assertion=eyJhbGciOiJSUzI1NiIsIng1dCI6Imd4OHRHeXN5amNScUtqRlBuZDdSRnd2d1pJMCJ9.eyJ{a lot of characters here}M8U3bSUKKJDEg&grant_type=client_credentials
Risposta del token di accesso da servizio a servizio
Una risposta corretta contiene una risposta OAuth 2.0 JSON con i parametri seguenti:
Parametro | Descrizione |
---|---|
access_token | Token di accesso richiesto. Il servizio Web chiamante può usare questo token per l'autenticazione nel servizio Web ricevente. |
token_type | Indica il valore del tipo di token. L'unico tipo supportato da Azure AD è Bearer. Per altre informazioni sui bearer token, vedere OAuth 2.0 Authorization Framework: Bearer Token Usage (RFC 6750) (Framework di autorizzazione di OAuth 2.0: uso dei bearer token - RFC 6750). |
expires_in | Validità del token di accesso (espressa in secondi). |
expires_on | Scadenza del token di accesso. La data è rappresentata come numero di secondi da 1970-01-01T0:0:0Z UTC fino alla scadenza. Questo valore viene usato per determinare la durata dei token memorizzati nella cache. |
not_before | Ora da cui il token di accesso diventa utilizzabile. La data è rappresentata come numero di secondi da 1970-01-01T0:0:0Z UTC fino all'ora di validità per il token. |
resource | URI ID app del servizio Web ricevente. |
Esempio di risposta
L'esempio seguente mostra una risposta corretta a una richiesta di token di accesso per un servizio Web.
{
"access_token":"eyJ0eXAiO ... 0X2tnSQLEANnSPHY0gKcgw",
"token_type":"Bearer",
"expires_in":"3599",
"expires_on":"1388452167",
"resource":"https://service.contoso.com/"
}
Usare il token di accesso per accedere alla risorsa protetta
Il servizio può usare il token acquisito per eseguire 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