Azure Active Directory B2C: accesso Web con OpenID ConnectAzure Active Directory B2C: Web sign-in with OpenID Connect

OpenID Connect è un protocollo di autenticazione basato su OAuth 2.0 che può essere usato per consentire agli utenti di accedere in modo sicuro alle applicazioni Web.OpenID Connect is an authentication protocol, built on top of OAuth 2.0, that can be used to securely sign users in to web applications. Tramite l'implementazione in Azure Active Directory B2C (Azure AD B2C) di OpenID Connect è possibile assegnare esperienze di gestione delle iscrizioni, degli accessi e altre esperienze di gestione delle identità nelle applicazioni Web ad Azure AD.By using the Azure Active Directory B2C (Azure AD B2C) implementation of OpenID Connect, you can outsource sign-up, sign-in, and other identity management experiences in your web applications to Azure Active Directory (Azure AD). Questa guida illustra come eseguire questa operazione in modo indipendente dal linguaggio.This guide shows you how to do so in a language-independent manner. La guida descrive come inviare e ricevere messaggi HTTP senza usare una delle librerie Microsoft open source.It describes how to send and receive HTTP messages without using any of our open-source libraries.

OpenID Connect estende il protocollo di autorizzazione OAuth 2.0 per consentirne l'uso come protocollo di autenticazione.OpenID Connect extends the OAuth 2.0 authorization protocol for use as an authentication protocol. Ciò consente di eseguire l'accesso Single Sign-On tramite OAuth.This allows you to perform single sign-on by using OAuth. Introduce il concetto di token ID, che è un token di sicurezza che consente al client di verificare l'identità dell'utente e di ottenere informazioni di base sul profilo dell'utente.It introduces the concept of an ID token, which is a security token that allows the client to verify the identity of the user and obtain basic profile information about the user.

Dal momento che è un'estensione di OAuth 2.0, consente anche alle app di acquisire in modo sicuro i token di accesso.Because it extends OAuth 2.0, it also enables apps to securely acquire access tokens. I token di accesso possono essere usati per accedere alle risorse protette tramite un server di autorizzazione.You can use access_tokens to access resources that are secured by an authorization server. Si consiglia OpenID Connect per la compilazione di un'applicazione Web ospitata su un server e accessibile da browser.We recommend OpenID Connect if you're building a web application that is hosted on a server and accessed through a browser. Per aggiungere la gestione delle identità alle applicazioni desktop o per dispositivi mobili tramite Azure AD B2C, è consigliabile usare OAuth 2.0 invece di OpenID Connect.If you want to add identity management to your mobile or desktop applications by using Azure AD B2C, you should use OAuth 2.0 rather than OpenID Connect.

Azure AD B2C estende il protocollo standard OpenID Connect per non limitarsi esclusivamente a semplici operazioni di autenticazione e autorizzazione.Azure AD B2C extends the standard OpenID Connect protocol to do more than simple authentication and authorization. Introduce il parametro criteri, che consente di usare OpenID Connect per aggiungere esperienze utente all'app, ad esempio la gestione delle iscrizioni, degli accessi e dei profili.It introduces the policy parameter, which enables you to use OpenID Connect to add user experiences--such as sign-up, sign-in, and profile management--to your app. Di seguito viene illustrato come usare OpenID Connect e i criteri per implementare ognuna di queste esperienze nelle applicazioni Web.Here, we show you how to use OpenID Connect and policies to implement each of these experiences in your web applications. Viene anche illustrato come ottenere i token di accesso per accedere alle API Web.We'll also show you how to get access tokens for accessing web APIs.

Le richieste HTTP di esempio nella sezione seguente usano la directory B2C di esempio, fabrikamb2c.onmicrosoft.com, nonché l'applicazione di esempio, https://aadb2cplayground.azurewebsites.net, e i criteri.The example HTTP requests in the next section use our sample B2C directory, fabrikamb2c.onmicrosoft.com, as well as our sample application, https://aadb2cplayground.azurewebsites.net, and policies. Si possono provare le richieste in totale autonomia usando questi valori oppure è possibile sostituirli con valori personalizzati.You're free to try out the requests yourself by using these values, or you can replace them with your own. Altre informazioni su come ottenere un tenant, un'applicazione e criteri B2C.Learn how to get your own B2C tenant, application, and policies.

Invio di richieste di autenticazioneSend authentication requests

Quando l'app Web deve autenticare l'utente ed eseguire un criterio, può indirizzarlo all'endpoint /authorize .When your web app needs to authenticate the user and execute a policy, it can direct the user to the /authorize endpoint. Questa è la parte interattiva del flusso, dove l'utente esegue operazioni in base ai criteri.This is the interactive portion of the flow, where the user takes action, depending on the policy.

In questa richiesta il client indica le autorizzazioni che deve acquisire dall'utente nel parametro scope e i criteri da eseguire nel parametro p.In this request, the client indicates the permissions that it needs to acquire from the user in the scope parameter and the policy to execute in the p parameter. Di seguito vengono illustrati tre esempi (con interruzioni di riga per migliorare la leggibilità), ognuno dei quali usa criteri diversi.Three examples are provided in the following sections (with line breaks for readability), each using a different policy. Per apprendere il funzionamento di ogni richiesta, provare a incollare la richiesta in un browser ed eseguirla.To get a feel for how each request works, try pasting the request into a browser and running it.

Uso di un criterio di accessoUse a sign-in policy

GET https://login.microsoftonline.com/fabrikamb2c.onmicrosoft.com/oauth2/v2.0/authorize?
client_id=90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6
&response_type=code+id_token
&redirect_uri=https%3A%2F%2Faadb2cplayground.azurewebsites.net%2F
&response_mode=form_post
&scope=openid%20offline_access
&state=arbitrary_data_you_can_receive_in_the_response
&nonce=12345
&p=b2c_1_sign_in

Uso di un criterio di iscrizioneUse a sign-up policy

GET https://login.microsoftonline.com/fabrikamb2c.onmicrosoft.com/oauth2/v2.0/authorize?
client_id=90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6
&response_type=code+id_token
&redirect_uri=https%3A%2F%2Faadb2cplayground.azurewebsites.net%2F
&response_mode=form_post
&scope=openid%20offline_access
&state=arbitrary_data_you_can_receive_in_the_response
&nonce=12345
&p=b2c_1_sign_up

Uso di un criterio di modifica del profiloUse an edit-profile policy

GET https://login.microsoftonline.com/fabrikamb2c.onmicrosoft.com/oauth2/v2.0/authorize?
client_id=90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6
&response_type=code+id_token
&redirect_uri=https%3A%2F%2Faadb2cplayground.azurewebsites.net%2F
&response_mode=form_post
&scope=openid%20offline_access
&state=arbitrary_data_you_can_receive_in_the_response
&nonce=12345
&p=b2c_1_edit_profile
ParametroParameter Obbligatorio?Required? DescrizioneDescription
client_idclient_id ObbligatoriaRequired ID applicazione assegnato all'app dal portale di Azure .The application ID that the Azure portal assigned to your app.
response_typeresponse_type ObbligatorioRequired Tipo di risposta, che deve includere un token ID per OpenID Connect.The response type, which must include an ID token for OpenID Connect. Se l'app Web necessita anche di token per chiamare un'API Web, è possibile usare code+id_token, come illustrato qui.If your web app also needs tokens for calling a web API, you can use code+id_token, as we've done here.
redirect_uriredirect_uri ConsigliatoRecommended Parametro redirect_uri dell'app, dove le risposte di autenticazione possono essere inviate e ricevute dall'app.The redirect_uri parameter of your app, where authentication responses can be sent and received by your app. Deve corrispondere esattamente a uno dei parametri redirect_uri registrati nel portale, ad eccezione del fatto che deve essere codificato come URL.It must exactly match one of the redirect_uri parameters that you registered in the portal, except that it must be URL encoded.
scopescope ObbligatorioRequired Elenco di ambiti separati da spazi.A space-separated list of scopes. Un valore per l'ambito singolo indica ad Azure AD entrambe le autorizzazioni richieste.A single scope value indicates to Azure AD both permissions that are being requested. L'ambito openid indica un'autorizzazione per l'accesso dell'utente e per ottenere i dati relativi all'utente sotto forma di token ID. Altre informazioni sono riportate più avanti in questo articolo.The openid scope indicates a permission to sign in the user and get data about the user in the form of ID tokens (more to come on this later in the article). L’ambito offline_access è facoltativo per le applicazioni Web.The offline_access scope is optional for web apps. Indica che l'app richiede un token di aggiornamento per un accesso di lunga durata alle risorse.It indicates that your app will need a refresh token for long-lived access to resources.
response_moderesponse_mode ConsigliatoRecommended Metodo da usare per inviare all'app il codice di autorizzazione risultante.The method that should be used to send the resulting authorization code back to your app. Può essere query, form_post o fragment.It can be either query, form_post, or fragment. form_post è la modalità di risposta consigliata perché offre la sicurezza migliore.The form_post response mode is recommended for best security.
statestate ConsigliatoRecommended Valore incluso nella richiesta che viene restituito nella risposta del token.A value included in the request that is also returned in the token response. Può trattarsi di una stringa di qualsiasi contenuto.It can be a string of any content that you want. Per evitare gli attacchi di richiesta intersito falsa, viene in genere usato un valore univoco generato casualmente.A randomly generated unique value is typically used for preventing cross-site request forgery attacks. Lo stato viene inoltre usato per codificare le informazioni sullo stato dell'utente nell'app prima dell'esecuzione della richiesta di autenticazione, ad esempio la pagina in cui si trovava.The state is also used to encode information about the user's state in the app before the authentication request occurred, such as the page they were on.
noncenonce ObbligatorioRequired Valore incluso nella richiesta, generato dall'app, che verrà incluso nel token ID risultante come attestazione.A value included in the request (generated by the app) that will be included in the resulting ID token as a claim. L'app può verificare questo valore per ridurre gli attacchi di riproduzione del token.The app can then verify this value to mitigate token replay attacks. Il valore è in genere una stringa casuale univoca che può essere usata per identificare l'origine della richiesta.The value is typically a randomized unique string that can be used to identify the origin of the request.
pp ObbligatorioRequired Criteri che verranno eseguiti.The policy that will be executed. Si tratta del nome di un criterio creato nel tenant B2C.It is the name of a policy that is created in your B2C tenant. Il valore del nome dei criteri deve iniziare con b2c\_1\_.The policy name value should begin with b2c\_1\_. Altre informazioni sui criteri sono disponibili nell'articolo relativo al framework di criteri estendibile.Learn more about policies and the extensible policy framework.
promptprompt FacoltativoOptional Tipo di interazione utente obbligatoria.The type of user interaction that is required. L'unico valore valido in questa fase è login, che impone all'utente di immettere le credenziali per la richiesta.The only valid value at this time is login, which forces the user to enter their credentials on that request. L'accesso Single Sign-On non avrà effetto.Single sign-on will not take effect.

Viene a questo punto richiesto all'utente di completare il flusso di lavoro dei criteri.At this point, the user is asked to complete the policy's workflow. È possibile che venga richiesto all'utente di immettere nome utente e password, di accedere con un'identità di social networking, di iscriversi alla directory o di seguire altre procedure, a seconda di come sono definiti i criteri.This might involve the user entering their username and password, signing in with a social identity, signing up for the directory, or any other number of steps, depending on how the policy is defined.

Dopo che l'utente ha completato i criteri, Azure AD restituisce una risposta all'app nel parametro redirect_uri indicato, usando il metodo specificato nel parametro response_mode.After the user completes the policy, Azure AD returns a response to your app at the indicated redirect_uri parameter, by using the method that is specified in the response_mode parameter. La risposta è la stessa per ognuno dei casi precedenti, indipendentemente dai criteri eseguiti.The response is the same for each of the preceding cases, independent of the policy that is executed.

Una risposta con esito positivo che utilizza response_mode=fragment ha un aspetto simile al seguente:A successful response using response_mode=fragment would look like:

GET https://aadb2cplayground.azurewebsites.net/#
id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...
&code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq...
&state=arbitrary_data_you_can_receive_in_the_response
ParametroParameter DescrizioneDescription
id_tokenid_token Token ID richiesto dall'app.The ID token that the app requested. È possibile usare il token ID per verificare l'identità dell'utente e avviare una sessione con l'utente.You can use the ID token to verify the user's identity and begin a session with the user. Altre informazioni dettagliate sui token ID e sul relativo contenuto sono incluse nelle informazioni di riferimento sui token di Azure AD B2C.More details on ID tokens and their contents are included in the Azure AD B2C token reference.
codecode Codice di autorizzazione richiesto dall'app, se è stato usato response_type=code+id_token.The authorization code that the app requested, if you used response_type=code+id_token. L'app può usare il codice di autorizzazione per richiedere un token di accesso per una risorsa di destinazione.The app can use the authorization code to request an access token for a target resource. I codici di autorizzazione hanno una durata molto breve.Authorization codes are very short-lived. In genere scadono dopo circa 10 minuti.Typically, they expire after about 10 minutes.
statestate Se un parametro state è incluso nella richiesta, lo stesso valore deve essere visualizzato nella risposta.If a state parameter is included in the request, the same value should appear in the response. L'app deve verificare che i valori state nella richiesta e nella risposta siano identici.The app should verify that the state values in the request and response are identical.

È possibile inviare anche le risposte di errore al parametro redirect_uri. L'app può così gestirle adeguatamente:Error responses can also be sent to the redirect_uri parameter so that the app can handle them appropriately:

GET https://aadb2cplayground.azurewebsites.net/#
error=access_denied
&error_description=the+user+canceled+the+authentication
&state=arbitrary_data_you_can_receive_in_the_response
ParametroParameter DescrizioneDescription
errorerror Stringa di codice di errore che può essere usata per classificare i tipi di errori che si verificano e per generare una reazione.An error-code string that can be used to classify types of errors that occur and that can be used to react to errors.
error_descriptionerror_description Messaggio di errore specifico che consente a uno sviluppatore di identificare la causa principale di un errore di autenticazione.A specific error message that can help a developer identify the root cause of an authentication error.
statestate Vedere la descrizione completa nella prima tabella di questa sezione.See the full description in the first table in this section. Se un parametro state è incluso nella richiesta, lo stesso valore deve essere visualizzato nella risposta.If a state parameter is included in the request, the same value should appear in the response. L'app deve verificare che i valori state nella richiesta e nella risposta siano identici.The app should verify that the state values in the request and response are identical.

Convalidare il token IDValidate the ID token

La ricezione di un token ID non è sufficiente per autenticare l'utente.Just receiving an ID token is not enough to authenticate the user. È necessario convalidare la firma del token ID e verificare se le attestazioni nel token soddisfano i requisiti dell'app.You must validate the ID token's signature and verify the claims in the token per your app's requirements. Azure AD B2C usa i token Web JSON e la crittografia a chiave pubblica per firmare i token e verificarne la validità.Azure AD B2C uses JSON Web Tokens (JWTs) and public key cryptography to sign tokens and verify that they are valid.

Sono disponibili molte librerie open source per la convalida dei token JWT, a seconda del linguaggio preferito.There are many open-source libraries that are available for validating JWTs, depending on your language of preference. È consigliabile prendere in esame tali opzioni anziché implementare una logica di convalida personalizzata.We recommend exploring those options rather than implementing your own validation logic. Le presenti informazioni sono utili per comprendere come usare correttamente queste librerie.The information here will be useful in figuring out how to properly use those libraries.

Azure AD B2C dispone di un endpoint di metadati OpenID Connect, che consente a un'applicazione di recuperare informazioni su Azure AD B2C in fase di esecuzione.Azure AD B2C has an OpenID Connect metadata endpoint, which allows an app to fetch information about Azure AD B2C at runtime. Queste informazioni includono endpoint, contenuti del token e chiavi per la firma dei token.This information includes endpoints, token contents, and token signing keys. Il tenant B2C include un documento di metadati JSON per ogni criterio.There is a JSON metadata document for each policy in your B2C tenant. Il documento di metadati dei criteri b2c_1_sign_in in fabrikamb2c.onmicrosoft.com si trova ad esempio in:For example, the metadata document for the b2c_1_sign_in policy in fabrikamb2c.onmicrosoft.com is located at:

https://login.microsoftonline.com/fabrikamb2c.onmicrosoft.com/v2.0/.well-known/openid-configuration?p=b2c_1_sign_in

Una delle proprietà del documento di configurazione è jwks_uri, il cui valore per gli stessi criteri è:One of the properties of this configuration document is jwks_uri, whose value for the same policy would be:

https://login.microsoftonline.com/fabrikamb2c.onmicrosoft.com/discovery/v2.0/keys?p=b2c_1_sign_in.https://login.microsoftonline.com/fabrikamb2c.onmicrosoft.com/discovery/v2.0/keys?p=b2c_1_sign_in.

Per determinare quali criteri sono stati usati per la firma di un token ID (e la posizione dove recuperare i metadati), sono disponibili due opzioni.To determine which policy was used in signing an ID token (and from where to fetch the metadata), you have two options. Prima di tutto il nome dei criteri è incluso nell'attestazione acr del token ID.First, the policy name is included in the acr claim in the ID token. Per informazioni su come analizzare le attestazioni da un token ID, vedere le informazioni di riferimento sul token Azure AD B2C.For information on how to parse the claims from an ID token, see the Azure AD B2C token reference. L'altra opzione consiste nel codificare i criteri nel valore del parametro state quando si rilascia la richiesta, per poi decodificarlo e determinare quali criteri sono stati utilizzati.Your other option is to encode the policy in the value of the state parameter when you issue the request, and then decode it to determine which policy was used. Entrambi i metodi sono validi.Either method is valid.

Dopo avere acquisito il documento di metadati dall'endpoint dei metadati OpenID Connect, è possibile usare le chiavi pubbliche RSA 256 che si trovano in questo endpoint per convalidare la firma del token ID.After you've acquired the metadata document from the OpenID Connect metadata endpoint, you can use the RSA 256 public keys (which are located at this endpoint) to validate the signature of the ID token. In un determinato punto nel tempo è possibile che siano presenti più chiavi elencate in questo endpoint, ognuna identificata da un'attestazione kid.There might be multiple keys listed at this endpoint at any given point in time, each identified by a kid claim. L'intestazione del token ID contiene anche un'attestazione kid, che indica quali di queste chiavi sono state usate per firmare il token ID.The header of the ID token also contains a kid claim, which indicates which of these keys was used to sign the ID token. Per altre informazioni, vedere le informazioni di riferimento sul token di Azure AD B2C (in particolare la sezione relativa alla convalida dei token).For more information, see the Azure AD B2C token reference (the section on validating tokens, in particular).

Dopo avere convalidato la firma del token ID, è necessario verificare diverse attestazioni.After you've validated the signature of the ID token, there are several claims that you need to verify. Ad esempio:For instance:

  • È necessario convalidare l'attestazione nonce per impedire attacchi di riproduzione del token.You should validate the nonce claim to prevent token replay attacks. Il valore deve corrispondere a quello specificato nella richiesta di accesso.Its value should be what you specified in the sign-in request.
  • È consigliabile convalidare l'attestazione aud per assicurarsi che il token ID sia stato rilasciato per l'app.You should validate the aud claim to ensure that the ID token was issued for your app. Il valore deve essere l'ID applicazione dell'app.Its value should be the application ID of your app.
  • È consigliabile convalidare le attestazioni iat e exp per assicurarsi che il token ID non sia scaduto.You should validate the iat and exp claims to ensure that the ID token has not expired.

Esistono numerose altre convalide che è consigliabile eseguire.There are also several more validations that you should perform. Queste convalide sono descritte in dettaglio nella Specifica di base di OpenID Connect. È inoltre consigliabile convalidare attestazioni aggiuntive in base allo scenario.These are described in detail in the OpenID Connect Core Spec. You might also want to validate additional claims, depending on your scenario. Alcune convalide comuni includono:Some common validations include:

  • Verificare che l'utente o l'organizzazione abbiano eseguito l'iscrizione all'app.Ensuring that the user/organization has signed up for the app.
  • Verificare che l'utente abbia le autorizzazioni o i privilegi adeguati.Ensuring that the user has proper authorization/privileges.
  • Verificare che sia stato applicato un determinato livello di autenticazione, ad esempio l'autenticazione a più fattori di Azure.Ensuring that a certain strength of authentication has occurred, such as Azure Multi-Factor Authentication.

Per altri dettagli sulle attestazioni in un token ID, vedere le informazioni di riferimento sul token di Azure AD B2C.For more information on the claims in an ID token, see the Azure AD B2C token reference.

Dopo avere convalidato il token ID, è possibile avviare una sessione con l'utente.After you have validated the ID token, you can begin a session with the user. Usare le attestazioni del token ID per ottenere informazioni sull'utente nell'app.You can use the claims in the ID token to obtain information about the user in your app. Gli usi di queste informazioni includono la visualizzazione, i record e l'autorizzazione.Uses for this information include display, records, and authorization.

Acquisizione di un tokenGet a token

Se l'app Web deve solo eseguire criteri, è possibile ignorare le prossime sezioni.If you need your web app to only execute policies, you can skip the next few sections. Queste sezioni sono applicabili solo alle app Web che devono eseguire chiamate autenticate a un'API Web e che sono inoltre protette da Azure AD B2C.These sections are applicable only to web apps that need to make authenticated calls to a web API and are also protected by Azure AD B2C.

È possibile riscattare il codice di autorizzazione acquisito, tramite response_type=code+id_token, per un token nella risorsa desiderata inviando una richiesta POST all'endpoint /token.You can redeem the authorization code that you acquired (by using response_type=code+id_token) for a token to the desired resource by sending a POST request to the /token endpoint. L'unica risorsa per la quale al momento è possibile richiedere un token è l'API Web back-end dell'app.Currently, the only resource that you can request a token for is your app's own back-end web API. La convenzione per richiedere un token di questo tipo consiste nell'usare l'ID client dell'app come ambito:The convention for requesting a token to yourself is to use your app's client ID as the scope:

POST fabrikamb2c.onmicrosoft.com/oauth2/v2.0/token?p=b2c_1_sign_in HTTP/1.1
Host: https://login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&client_id=90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6&scope=90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6 offline_access&code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq...&redirect_uri=urn:ietf:wg:oauth:2.0:oob&client_secret=<your-application-secret>
ParametroParameter Obbligatorio?Required? DescrizioneDescription
pp ObbligatorioRequired Il criterio utilizzato per acquisire il codice di autorizzazione.The policy that was used to acquire the authorization code. Non è possibile usare un criterio diverso in questa richiesta.You cannot use a different policy in this request. Si noti che questo parametro viene aggiunto alla stringa di query, non al corpo di POST.Note that you add this parameter to the query string, not to the POST body.
client_idclient_id ObbligatoriaRequired ID applicazione assegnato all'app dal portale di Azure .The application ID that the Azure portal assigned to your app.
grant_typegrant_type ObbligatorioRequired Tipo di concessione, che deve essere authorization_code per il flusso del codice di autorizzazione.The type of grant, which must be authorization_code for the authorization code flow.
scopescope ConsigliatoRecommended Elenco di ambiti separati da spazi.A space-separated list of scopes. Un valore per l'ambito singolo indica ad Azure AD entrambe le autorizzazioni richieste.A single scope value indicates to Azure AD both permissions that are being requested. L'ambito openid indica un'autorizzazione per l'accesso dell'utente e per ottenere i dati relativi all'utente sotto forma di parametri id_token.The openid scope indicates a permission to sign in the user and get data about the user in the form of id_token parameters. Può essere usato per ottenere i token nell'API Web back-end dell'app, che è rappresentata dallo stesso ID applicazione del client.It can be used to get tokens to your app's own back-end web API, which is represented by the same application ID as the client. L'ambito offline_access indica che l'app necessita di un token di aggiornamento per un accesso di lunga durata alle risorse.The offline_access scope indicates that your app will need a refresh token for long-lived access to resources.
codecode ObbligatorioRequired Codice di autorizzazione acquisito nella prima sezione del flusso.The authorization code that you acquired in the first leg of the flow.
redirect_uriredirect_uri ObbligatorioRequired Parametro redirect_uri dell'applicazione dove è stato ricevuto il codice di autorizzazione.The redirect_uri parameter of the application where you received the authorization code.
client_secretclient_secret ObbligatoriaRequired La chiave privata dell’applicazione generata nel Portale Azure.The application secret that you generated in the Azure portal. La chiave privata dell'applicazione è un elemento di sicurezza importante.This application secret is an important security artifact. È necessario archiviarla in modo sicuro nel server.You should store it securely on your server. È necessario anche far ruotare periodicamente la chiave privata client.You should also rotate this client secret on a periodic basis.

Una risposta di token con esito positivo ha un aspetto simile al seguente:A successful token response looks like:

{
    "not_before": "1442340812",
    "token_type": "Bearer",
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
    "scope": "90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6 offline_access",
    "expires_in": "3600",
    "refresh_token": "AAQfQmvuDy8WtUv-sd0TBwWVQs1rC-Lfxa_NDkLqpg50Cxp5Dxj0VPF1mx2Z...",
}
ParametroParameter DescrizioneDescription
not_beforenot_before Il momento in cui il token viene considerato valido, nel periodo.The time at which the token is considered valid, in epoch time.
token_typetoken_type Valore del tipo di token.The token type value. L'unico tipo supportato da Azure AD è Bearer.The only type that Azure AD supports is Bearer.
access_tokenaccess_token Il token JWT firmato richiesto.The signed JWT token that you requested.
scopescope Ambiti per il quale il token è valido.The scopes for which the token is valid. Possono essere usati per memorizzare i token nella cache per un uso successivo.These can be used for caching tokens for later use.
expires_inexpires_in Periodo di validità del token di accesso (in secondi).The length of time that the access token is valid (in seconds).
refresh_tokenrefresh_token Token di aggiornamento di OAuth 2.0.An OAuth 2.0 refresh token. L'app può usare questo token per acquisire token aggiuntivi dopo la scadenza del token corrente.The app can use this token to acquire additional tokens after the current token expires. I token di aggiornamento hanno una lunga durata e possono essere usati per mantenere l'accesso alle risorse per lunghi periodi di tempo.Refresh tokens are long-lived and can be used to retain access to resources for extended periods of time. Per altre informazioni dettagliate, vedere le informazioni di riferimento sul token di B2C.For more details, refer to the B2C token reference. Si noti che per ricevere un token di aggiornamento, occorre avere usato l'ambito offline_access nelle richieste di autorizzazione e nelle richieste di token.Note that you must have used the scope offline_access in both the authorization and token requests in order to receive a refresh token.

Le risposte di errore si presentano nel modo seguente:Error responses look like:

{
    "error": "access_denied",
    "error_description": "The user revoked access to the app.",
}
ParametroParameter DescrizioneDescription
errorerror Stringa di codice di errore che può essere usata per classificare i tipi di errori che si verificano e per generare una reazione.An error-code string that can be used to classify types of errors that occur and that can be used to react to errors.
error_descriptionerror_description Messaggio di errore specifico che consente a uno sviluppatore di identificare la causa principale di un errore di autenticazione.A specific error message that can help a developer identify the root cause of an authentication error.

Uso del tokenUse the token

Dopo avere acquisito un token di accesso, è possibile usarlo nelle richieste alle API Web back-end includendolo nell'intestazione Authorization:Now that you've successfully acquired an access token, you can use the token in requests to your back-end web APIs by including it in the Authorization header:

GET /tasks
Host: https://mytaskwebapi.com
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...

Aggiornamento del tokenRefresh the token

I token ID hanno breve durata.ID tokens are short-lived. È necessario aggiornarli dopo la scadenza per continuare ad accedere alle risorse.You must refresh them after they expire to continue being able to access resources. A tale scopo, inviare un'altra richiesta POST all'endpoint /token,You can do so by submitting another POST request to the /token endpoint. Specificare questa volta il parametro refresh_token al posto del parametro code:This time, provide the refresh_token parameter instead of the code parameter:

POST fabrikamb2c.onmicrosoft.com/oauth2/v2.0/token?p=b2c_1_sign_in HTTP/1.1
Host: https://login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token&client_id=90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6&scope=openid offline_access&refresh_token=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq...&redirect_uri=urn:ietf:wg:oauth:2.0:oob&client_secret=<your-application-secret>
ParametroParameter ObbligatorioRequired DescrizioneDescription
pp ObbligatorioRequired Criteri usati per acquisire il token di aggiornamento originale.The policy that was used to acquire the original refresh token. Non è possibile usare un criterio diverso in questa richiesta.You cannot use a different policy in this request. Si noti che questo parametro viene aggiunto alla stringa di query, non al corpo di POST.Note that you add this parameter to the query string, not to the POST body.
client_idclient_id ObbligatoriaRequired ID applicazione assegnato all'app dal portale di Azure .The application ID that the Azure portal assigned to your app.
grant_typegrant_type ObbligatorioRequired Tipo di concessione, che deve essere un token di aggiornamento per questa parte del flusso del codice di autorizzazione.The type of grant, which must be a refresh token for this leg of the authorization code flow.
scopescope ConsigliatoRecommended Elenco di ambiti separati da spazi.A space-separated list of scopes. Un valore per l'ambito singolo indica ad Azure AD entrambe le autorizzazioni richieste.A single scope value indicates to Azure AD both permissions that are being requested. L'ambito openid indica un'autorizzazione per l'accesso dell'utente e per ottenere i dati relativi all'utente sotto forma di token ID.The openid scope indicates a permission to sign in the user and get data about the user in the form of ID tokens. Può essere usato per ottenere i token nell'API Web back-end dell'app, che è rappresentata dallo stesso ID applicazione del client.It can be used to get tokens to your app's own back-end web API, which is represented by the same application ID as the client. L'ambito offline_access indica che l'app necessita di un token di aggiornamento per un accesso di lunga durata alle risorse.The offline_access scope indicates that your app will need a refresh token for long-lived access to resources.
redirect_uriredirect_uri ConsigliatoRecommended Parametro redirect_uri dell'applicazione dove è stato ricevuto il codice di autorizzazione.The redirect_uri parameter of the application where you received the authorization code.
refresh_tokenrefresh_token ObbligatorioRequired Token di aggiornamento originale acquisito nella seconda sezione del flusso.The original refresh token that you acquired in the second leg of the flow. Si noti che per ricevere un token di aggiornamento, occorre avere usato l'ambito offline_access nelle richieste di autorizzazione e nelle richieste di token.Note that you must have used the scope offline_access in both the authorization and token requests in order to receive a refresh token.
client_secretclient_secret ObbligatoriaRequired La chiave privata dell’applicazione generata nel Portale Azure.The application secret that you generated in the Azure portal. La chiave privata dell'applicazione è un elemento di sicurezza importante.This application secret is an important security artifact. È necessario archiviarla in modo sicuro nel server.You should store it securely on your server. È necessario anche far ruotare periodicamente la chiave privata client.You should also rotate this client secret on a periodic basis.

Una risposta di token con esito positivo ha un aspetto simile al seguente:A successful token response looks like:

{
    "not_before": "1442340812",
    "token_type": "Bearer",
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
    "scope": "90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6 offline_access",
    "expires_in": "3600",
    "refresh_token": "AAQfQmvuDy8WtUv-sd0TBwWVQs1rC-Lfxa_NDkLqpg50Cxp5Dxj0VPF1mx2Z...",
}
ParametroParameter DescrizioneDescription
not_beforenot_before Il momento in cui il token viene considerato valido, nel periodo.The time at which the token is considered valid, in epoch time.
token_typetoken_type Valore del tipo di token.The token type value. L'unico tipo supportato da Azure AD è Bearer.The only type that Azure AD supports is Bearer.
access_tokenaccess_token Il token JWT firmato richiesto.The signed JWT token that you requested.
scopescope Ambito per il quale il token è valido, che può essere usato per memorizzare i token nella cache per un uso successivo.The scope that the token is valid for, which can be used for caching tokens for later use.
expires_inexpires_in Periodo di validità del token di accesso (in secondi).The length of time that the access token is valid (in seconds).
refresh_tokenrefresh_token Token di aggiornamento di OAuth 2.0.An OAuth 2.0 refresh token. L'app può usare questo token per acquisire token aggiuntivi dopo la scadenza del token corrente.The app can use this token to acquire additional tokens after the current token expires. I token di aggiornamento hanno una lunga durata e possono essere usati per mantenere l'accesso alle risorse per lunghi periodi di tempo.Refresh tokens are long-lived and can be used to retain access to resources for extended periods of time. Per informazioni dettagliate, consultare il riferimento al token B2C.For more detail, refer to the B2C token reference.

Le risposte di errore si presentano nel modo seguente:Error responses look like:

{
    "error": "access_denied",
    "error_description": "The user revoked access to the app.",
}
ParametroParameter DescrizioneDescription
errorerror Stringa di codice di errore che può essere usata per classificare i tipi di errori che si verificano e per generare una reazione.An error-code string that can be used to classify types of errors that occur and that can be used to react to errors.
error_descriptionerror_description Messaggio di errore specifico che consente a uno sviluppatore di identificare la causa principale di un errore di autenticazione.A specific error message that can help a developer identify the root cause of an authentication error.

Inviare una richiesta di disconnessioneSend a sign-out request

Per la disconnessione di un utente dall'app, non è sufficiente cancellare i cookie dell'app o terminare la sessione dell'utente.When you want to sign the user out of the app, it is not enough to clear your app's cookies or otherwise end the session with the user. È anche necessario reindirizzare l'utente ad Azure AD per la disconnessione. In caso contrario, l'utente potrebbe essere in grado di autenticarsi nuovamente all'app senza immettere le credenziali,You must also redirect the user to Azure AD to sign out. If you fail to do so, the user might be able to reauthenticate to your app without entering their credentials again. in quanto avrà accesso a una sessione Single Sign-On valida con Azure AD.This is because they will have a valid single sign-on session with Azure AD.

È sufficiente reindirizzare l'utente all'endpoint end_session elencato nel documento dei metadati di OpenID Connect descritto precedentemente nella sezione "Convalidare il token ID":You can simply redirect the user to the end_session endpoint that is listed in the OpenID Connect metadata document described earlier in the "Validate the ID token" section:

GET https://login.microsoftonline.com/fabrikamb2c.onmicrosoft.com/oauth2/v2.0/logout?
p=b2c_1_sign_in
&post_logout_redirect_uri=https%3A%2F%2Faadb2cplayground.azurewebsites.net%2F
ParametroParameter Obbligatorio?Required? DescrizioneDescription
pp ObbligatorioRequired Criteri da usare per disconnettere l'utente dall'applicazione.The policy that you want to use to sign the user out of your application.
post_logout_redirect_uripost_logout_redirect_uri ConsigliatoRecommended URL di destinazione al quale l'utente deve essere reindirizzato dopo la disconnessione. Se omesso, l'utente visualizzerà un messaggio generico di Azure AD B2C.The URL that the user should be redirected to after successful sign-out. If it is not included, Azure AD B2C shows the user a generic message.

Nota

Sebbene l'indirizzamento dell'utente all'endpoint end_session comporti la cancellazione di una parte dello stato Single Sign-On dell'utente con Azure AD B2C, l'utente non verrà disconnesso dalla sessione del provider di identità social.Although directing the user to the end_session endpoint will clear some of the user's single sign-on state with Azure AD B2C, it will not sign the user out of their social identity provider (IDP) session. Se l'utente seleziona lo stesso provider di identità in un accesso successivo, l'autenticazione verrà eseguita nuovamente senza immettere le credenziali.If the user selects the same IDP during a subsequent sign-in, they will be reauthenticated, without entering their credentials. Se un utente vuole disconnettersi dall'applicazione B2C, non significa necessariamente che intenda disconnettersi dall'account Facebook.If a user wants to sign out of your B2C application, it does not necessarily mean they want to sign out of their Facebook account. Tuttavia, in caso di account locali, la sessione dell'utente viene terminata in modo corretto.However, in the case of local accounts, the user's session will be ended properly.

Uso del proprio tenant B2CUse your own B2C tenant

Per provare queste richieste autonomamente, è prima di tutto necessario eseguire questi tre passaggi e quindi sostituire i valori di esempio descritti in precedenza con i valori di proprio interesse:If you want to try these requests for yourself, you must first perform these three steps, and then replace the example values described earlier with your own:

  1. Creare un tenant B2Ce usare il nome del tenant nelle richieste.Create a B2C tenant, and use the name of your tenant in the requests.
  2. Creare un'applicazione per ottenere un ID applicazione.Create an application to obtain an application ID. Includere un'API Web/app Web nell'app.Include a web app/web API in your app. Se lo si desidera, creare un segreto dell'applicazione.Optionally, create an application secret.
  3. Creare i criteri per ottenere i nomi dei criteri.Create your policies to obtain your policy names.