Credenziali del certificato per l'autenticazione dell'applicazioneCertificate credentials for application authentication

Azure Active Directory consente a un'applicazione di usare le proprie credenziali per l'autenticazione, ad esempio, nel flusso di concessione delle credenziali client di OAuth 2.0 e nel flusso on-behalf-of.Azure Active Directory allows an application to use its own credentials for authentication, for example, in the OAuth 2.0 Client Credentials Grant flow and the On-Behalf-Of flow. Un tipo di credenziale che può essere usato è un'asserzione di token JSON Web (JWT) firmata con un certificato di proprietà dell'applicazione.One form of credential that can be used is a JSON Web Token(JWT) assertion signed with a certificate that the application owns.

Formato dell'asserzioneFormat of the assertion

Per calcolare l'asserzione, è preferibile usare una delle numerose librerie di token JSON Web nel linguaggio scelto.To compute the assertion, you probably want to use one of the many JSON Web Token libraries in the language of your choice. Le informazioni incluse nel token sono:The information carried by the token is:

ParametroParameter CommentoRemark
alg Deve essere RS256Should be RS256
typ Deve essere JWTShould be JWT
x5t Deve essere l'identificazione personale SHA-1 del certificato X.509Should be the X.509 Certificate SHA-1 thumbprint

Attestazioni (payload)Claims (Payload)

ParametroParameter CommentoRemark
aud Gruppo di destinatari: deve essere https://login.microsoftonline.com/*tenant_Id*/oauth2/tokenAudience: Should be https://login.microsoftonline.com/*tenant_Id*/oauth2/token
exp Data di scadenza: la data di scadenza del token.Expiration date: the date when the token expires. L'ora è rappresentata come numero di secondi dal 1° gennaio 1970 (1970-01-01T0:0:0Z) UTC fino all'ora in cui scade la validità del token.The time is represented as the number of seconds from January 1, 1970 (1970-01-01T0:0:0Z) UTC until the time the token validity expires.
iss Autorità di certificazione: deve essere il parametro client_id (ID applicazione del servizio client)Issuer: should be the client_id (Application Id of the client service)
jti GUID: l'ID token JWTGUID: the JWT ID
nbf Non prima: la data prima della quale il token non può essere usato.Not Before: the date before which the token cannot be used. La data e l'ora sono rappresentate come numero di secondi dal 1 gennaio 1970 (1970-01-01T0:0:0Z) UTC fino alla data e all'ora in cui il token è stato rilasciato.The time is represented as the number of seconds from January 1, 1970 (1970-01-01T0:0:0Z) UTC until the time the token was issued.
sub Oggetto: per quanto riguarda iss, deve essere il parametro client_id (ID applicazione del servizio client)Subject: As for iss, should be the client_id (Application Id of the client service)

FirmaSignature

La firma viene calcolata applicando il certificato come descritto nella specifica RFC7519 sul token JSON WebThe signature is computed applying the certificate as described in the JSON Web Token RFC7519 specification

Esempio di asserzione del token JWT decodificataExample of a decoded JWT assertion

{
  "alg": "RS256",
  "typ": "JWT",
  "x5t": "gx8tGysyjcRqKjFPnd7RFwvwZI0"
}
.
{
  "aud": "https: //login.microsoftonline.com/contoso.onmicrosoft.com/oauth2/token",
  "exp": 1484593341,
  "iss": "97e0a5b7-d745-40b6-94fe-5f77d35c6e05",
  "jti": "22b3bb26-e046-42df-9c96-65dbd72c1c81",
  "nbf": 1484592741,  
  "sub": "97e0a5b7-d745-40b6-94fe-5f77d35c6e05"
}
.
"Gh95kHCOEGq5E_ArMBbDXhwKR577scxYaoJ1P{a lot of characters here}KKJDEg"

Esempio di asserzione del token JWT codificataExample of an encoded JWT assertion

La stringa seguente è un esempio di asserzione codificata.The following string is an example of encoded assertion. Se si osserva con attenzione, è possibile notare tre sezioni separate da punti (.).If you look carefully, you notice three sections separated by dots (.). La prima sezione codifica l'intestazione, la seconda il payload e l'ultima è la firma calcolata con i certificati a partire dal contenuto delle prime due sezioni.The first section encodes the header, the second the payload, and the last is the signature computed with the certificates from the content of the first two sections.

"eyJhbGciOiJSUzI1NiIsIng1dCI6Imd4OHRHeXN5amNScUtqRlBuZDdSRnd2d1pJMCJ9.eyJhdWQiOiJodHRwczpcL1wvbG9naW4ubWljcm9zb2Z0b25saW5lLmNvbVwvam1wcmlldXJob3RtYWlsLm9ubWljcm9zb2Z0LmNvbVwvb2F1dGgyXC90b2tlbiIsImV4cCI6MTQ4NDU5MzM0MSwiaXNzIjoiOTdlMGE1YjctZDc0NS00MGI2LTk0ZmUtNWY3N2QzNWM2ZTA1IiwianRpIjoiMjJiM2JiMjYtZTA0Ni00MmRmLTljOTYtNjVkYmQ3MmMxYzgxIiwibmJmIjoxNDg0NTkyNzQxLCJzdWIiOiI5N2UwYTViNy1kNzQ1LTQwYjYtOTRmZS01Zjc3ZDM1YzZlMDUifQ.
Gh95kHCOEGq5E_ArMBbDXhwKR577scxYaoJ1P{a lot of characters here}KKJDEg"

Registrare il certificato con Azure ADRegister your certificate with Azure AD

Per associare la credenziale del certificato all'applicazione client in Azure AD, è necessario modificare il manifesto dell'applicazione.To associate the certificate credential with the client application in Azure AD, you need to edit the application manifest. Con un certificato disponibile, è necessario calcolare:Having hold of a certificate, you need to compute:

  • $base64Thumbprint, che è la codifica Base 64 dell'hash del certificato$base64Thumbprint, which is the base64 encoding of the certificate Hash
  • $base64Value, che è la codifica Base 64 dei dati non elaborati dell'hash del certificato$base64Value, which is the base64 encoding of the certificate raw data

È anche necessario specificare un GUID per identificare la chiave nel manifesto dell'applicazione ($keyId).you also need to provide a GUID to identify the key in the application manifest ($keyId)

Nella registrazione dell'app di Azure per l'applicazione client aprire il manifesto dell'applicazione e sostituire la proprietà keyCredentials con le informazioni del nuovo certificato usando lo schema seguente:In the Azure app registration for the client application, open the application manifest, and replace the keyCredentials property with your new certificate information using the following schema:

"keyCredentials": [
    {
        "customKeyIdentifier": "$base64Thumbprint",
        "keyId": "$keyid",
        "type": "AsymmetricX509Cert",
        "usage": "Verify",
        "value":  "$base64Value"
    }
]

Salvare le modifiche apportate al manifesto dell'applicazione e caricare in Azure AD.Save the edits to the application manifest, and upload to Azure AD. La proprietà keyCredentials è multivalore, quindi è possibile caricare più certificati per una gestione delle chiavi più completa.The keyCredentials property is multi-valued, so you may upload multiple certificates for richer key management.