Chiamate da servizio a servizio mediante le credenziali client (certificato o segreto condiviso)Service to service calls using client credentials (shared secret or certificate)

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.The OAuth 2.0 Client Credentials Grant Flow permits a web service (confidential client) to use its own credentials instead of impersonating a user, to authenticate when calling another web service. In questo scenario il client è in genere un servizio Web di livello intermedio, un servizio daemon o un sito Web.In this scenario, the client is typically a middle-tier web service, a daemon service, or web site. 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.For a higher level of assurance, Azure AD also allows the calling service to use a certificate (instead of a shared secret) as a credential.

Diagramma del flusso di concessione delle credenziali clientClient credentials grant flow diagram

Il diagramma seguente illustra il funzionamento del flusso di concessione delle credenziali client in Azure Active Directory (Azure AD).The following diagram explains how the client credentials grant flow works in Azure Active Directory (Azure AD).

Flusso di concessione delle credenziali client di OAuth 2.0

  1. L'applicazione client esegue l'autenticazione in corrispondenza dell'endpoint di emissione del token di Azure AD e richiede un token di accesso.The client application authenticates to the Azure AD token issuance endpoint and requests an access token.
  2. L'endpoint di emissione del token di Azure AD emette il token di accesso.The Azure AD token issuance endpoint issues the access token.
  3. Il token di accesso viene usato per l'autenticazione nella risorsa protetta.The access token is used to authenticate to the secured resource.
  4. I dati della risorsa protetta vengono restituiti all'applicazione Web.Data from the secured resource is returned to the web application.

Registrare i servizi in Azure ADRegister the Services in Azure AD

Registrare il servizio chiamante e il servizio ricevente in Azure Active Directory (Azure AD).Register both the calling service and the receiving service in Azure Active Directory (Azure AD). Per altre informazioni, vedere Integrazione di applicazioni con Azure Active Directory.For detailed instructions, see Integrating applications with Azure Active Directory.

Richiedere un token di accessoRequest an Access Token

Per richiedere un token di accesso, usare una richiesta HTTP POST per l'endpoint di Azure AD specifico del tenant.To request an access token, use an HTTP POST to the tenant-specific Azure AD endpoint.

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

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

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 Specifica il tipo di concessione richiesto.Specifies the requested grant type. In un flusso di concessione delle credenziali client il valore deve essere client_credentials.In a Client Credentials Grant flow, the value must be client_credentials.
client_idclient_id Obbligatoriarequired Specifica l'ID client di Azure AD del servizio Web chiamante.Specifies the Azure AD client id of the calling web service. Per trovare l'ID client dell'applicazione chiamante, nel portale Azure fare clic su Active Directory, passare alla directory e fare clic sull'applicazione.To find the calling application's client ID, in the Azure portal, click Active Directory, switch directory, click the application. client_id è l'ID applicazione.The client_id is the Application ID
client_secretclient_secret Obbligatoriarequired Immettere una chiave registrata per l'applicazione daemon o il servizio Web chiamante in Azure AD.Enter a key registered for the calling web service or daemon application in Azure AD. Per creare una chiave, nel portale di Azure fare clic su Active Directory, passare alla directory, fare clic su Impostazioni, fare clic su Chiavi e aggiungere una chiave.To create a key, in the Azure portal, click Active Directory, switch directory, click the application, click Settings, click Keys, and add a Key.
resourceresource Obbligatoriarequired Immettere l'URI ID app del servizio Web ricevente.Enter the App ID URI of the receiving web service. Per trovare l'URI dell'ID app, nel portale di Azure fare clic su Active Directory, passare alla directory, fare clic sull'applicazione di servizio, quindi fare clic su Impostazioni e infine su Proprietà.To find the App ID URI, in the Azure portal, click Active Directory, switch directory, click the service application, and then click Settings and Properties

EsempioExample

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

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 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 Specifica il tipo di risposta richiesto.Specifies the requested response type. In un flusso di concessione delle credenziali client il valore deve essere client_credentials.In a Client Credentials Grant flow, the value must be client_credentials.
client_idclient_id Obbligatoriarequired Specifica l'ID client di Azure AD del servizio Web chiamante.Specifies the Azure AD client id of the calling web service. Per trovare l'ID client dell'applicazione chiamante, nel portale Azure fare clic su Active Directory, passare alla directory e fare clic sull'applicazione.To find the calling application's client ID, in the Azure portal, click Active Directory, switch directory, click the application. client_id è l'ID applicazione.The client_id is the Application ID
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 Immettere l'URI ID app del servizio Web ricevente.Enter the App ID URI of the receiving web service. Per trovare l'URI dell'ID app, nel portale di Azure fare clic su Active Directory, selezionare la directory, fare clic sull'applicazione e infine su Configura.To find the App ID URI, in the Azure portal, click Active Directory, click the directory, click the application, and then click Configure.

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 il servizio Web https://service.contoso.com/ con un certificato.The following HTTP POST requests an access token for the https://service.contoso.com/ web service with a certificate. client_id identifica il servizio Web che richiede il token di accesso.The client_id identifies the web service that requests the access token.

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 servizioService-to-Service Access Token Response

Una risposta corretta contiene una risposta OAuth 2.0 JSON con i parametri seguenti:A success response contains a JSON OAuth 2.0 response with the following parameters:

ParametroParameter DescrizioneDescription
access_tokenaccess_token Token di accesso richiesto.The requested access token. Il servizio Web chiamante può usare questo token per l'autenticazione nel servizio Web ricevente.The calling web service can use this token to authenticate to the receiving web service.
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 OAuth2.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).
expires_inexpires_in Validità del token di accesso (espressa in secondi).How long 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.
not_beforenot_before Ora da cui il token di accesso diventa utilizzabile.The time from which the access token becomes usable. La data è rappresentata come numero di secondi da 1970-01-01T0:0:0Z UTC fino all'ora di validità per il token.The date is represented as the number of seconds from 1970-01-01T0:0:0Z UTC until time of validity for the token.
resourceresource URI ID app del servizio Web ricevente.The App ID URI of the receiving web service.

Esempio di rispostaExample of response

L'esempio seguente mostra una risposta corretta a una richiesta di token di accesso per un servizio Web.The following example shows a success response to a request for an access token to a web service.

{
"access_token":"eyJhbGciOiJSUzI1NiIsIng1dCI6IjdkRC1nZWNOZ1gxWmY3R0xrT3ZwT0IyZGNWQSIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJodHRwczovL3NlcnZpY2UuY29udG9zby5jb20vIiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvN2ZlODE0NDctZGE1Ny00Mzg1LWJlY2ItNmRlNTdmMjE0NzdlLyIsImlhdCI6MTM4ODQ0ODI2NywibmJmIjoxMzg4NDQ4MjY3LCJleHAiOjEzODg0NTIxNjcsInZlciI6IjEuMCIsInRpZCI6IjdmZTgxNDQ3LWRhNTctNDM4NS1iZWNiLTZkZTU3ZjIxNDc3ZSIsIm9pZCI6ImE5OTE5MTYyLTkyMTctNDlkYS1hZTIyLWYxMTM3YzI1Y2RlYSIsInN1YiI6ImE5OTE5MTYyLTkyMTctNDlkYS1hZTIyLWYxMTM3YzI1Y2RlYSIsImlkcCI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzdmZTgxNDQ3LWRhNTctNDM4NS1iZWNiLTZkZTU3ZjIxNDc3ZS8iLCJhcHBpZCI6ImQxN2QxNWJjLWM1NzYtNDFlNS05MjdmLWRiNWYzMGRkNThmMSIsImFwcGlkYWNyIjoiMSJ9.aqtfJ7G37CpKV901Vm9sGiQhde0WMg6luYJR4wuNR2ffaQsVPPpKirM5rbc6o5CmW1OtmaAIdwDcL6i9ZT9ooIIicSRrjCYMYWHX08ip-tj-uWUihGztI02xKdWiycItpWiHxapQm0a8Ti1CWRjJghORC1B1-fah_yWx6Cjuf4QE8xJcu-ZHX0pVZNPX22PHYV5Km-vPTq2HtIqdboKyZy3Y4y3geOrRIFElZYoqjqSv5q9Jgtj5ERsNQIjefpyxW3EwPtFqMcDm4ebiAEpoEWRN4QYOMxnC9OUBeG9oLA0lTfmhgHLAtvJogJcYFzwngTsVo6HznsvPWy7UP3MINA",
"token_type":"Bearer",
"expires_in":"3599",
"expires_on":"1388452167",
"resource":"https://service.contoso.com/"
}

Vedere ancheSee also