Azure Active Directory B2C: app a singola pagina tramite il flusso implicito OAuth 2.0Azure AD B2C: Single-page app sign-in by using OAuth 2.0 implicit flow

Nota

Questa funzionalità è in anteprima.This feature is in preview.

Molte app moderne hanno un front-end dell'app a singola pagina scritto principalmente in JavaScript.Many modern apps have a single-page app front end that primarily is written in JavaScript. L'app viene scritta spesso usando un framework come AngularJS, Ember.js o Durandal.Often, the app is written by using a framework like AngularJS, Ember.js, or Durandal. Le app a pagina singola e le altre app JavaScript che vengono eseguite soprattutto in un browser presentano alcune problematiche aggiuntive per l'autenticazione:Single-page apps and other JavaScript apps that run primarily in a browser have some additional challenges for authentication:

  • Le caratteristiche di sicurezza di queste app sono considerevolmente diverse da quelle delle tradizionali applicazioni Web basate su server.The security characteristics of these apps are significantly different from traditional server-based web applications.
  • Molti server di autorizzazione e provider di identità non supportano le richieste CORS (Condivisione risorse tra le origini).Many authorization servers and identity providers do not support cross-origin resource sharing (CORS) requests.
  • I reindirizzamenti dei browser a pagina intera dall'app possono risultare particolarmente fastidiosi per l'esperienza utente.Full-page browser redirects away from the app can be significantly invasive to the user experience.

Per supportare queste applicazioni, Azure Active Directory B2C (Azure AD B2C) usa il flusso implicito OAuth 2.0.To support these applications, Azure Active Directory B2C (Azure AD B2C) uses the OAuth 2.0 implicit flow. Il flusso di concessione implicita OAuth 2.0 è descritto nella sezione 4.2 della specifica di OAuth 2.0.The OAuth 2.0 authorization implicit grant flow is described in section 4.2 of the OAuth 2.0 specification. Nel flusso implicito l'app riceve i token direttamente dall'endpoint di autorizzazione di Azure Active Directory (Azure AD), senza alcuno scambio tra server.In implicit flow, the app receives tokens directly from the Azure Active Directory (Azure AD) authorize endpoint, without any server-to-server exchange. Tutta la logica di autenticazione e gestione della sessione avviene interamente nel client JavaScript, senza eseguire ulteriori reindirizzamenti di pagina.All authentication logic and session handling takes place entirely in the JavaScript client, without additional page redirects.

Azure AD B2C estende il flusso implicito OAuth 2.0 standard e va oltre le semplici operazioni di autorizzazione e autenticazione.Azure AD B2C extends the standard OAuth 2.0 implicit flow to more than simple authentication and authorization. Azure AD B2C introduce il parametro di criteri.Azure AD B2C introduces the policy parameter. Con il parametro di criteri è possibile usare OAuth 2.0 per aggiungere esperienze utente all'app, ad esempio la gestione dell'iscrizione, dell'accesso e del profilo.With the policy parameter, you can use OAuth 2.0 to add user experiences to your app, such as sign-up, sign-in, and profile management. Questo articolo spiega come usare il flusso implicito e Azure AD per implementare ogni esperienza nelle applicazioni a singola pagina.In this article, we show you how to use the implicit flow and Azure AD to implement each of these experiences in your single-page applications. Per iniziare, vedere anche gli esempi relativi a Node.js e Microsoft .NET.To help you get started, take a look at our Node.js and Microsoft .NET samples.

Nelle richieste HTTP di esempio in questo articolo si usa la directory di Azure AD B2C di esempio, fabrikamb2c.onmicrosoft.com. Si usano anche i criteri e l'applicazione di esempio.In the example HTTP requests in this article, we use our sample Azure AD B2C directory, fabrikamb2c.onmicrosoft.com. We also use our own sample application and policies. È possibile provare le richieste in autonomia usando questi valori o sostituendoli con valori personalizzati.You can try the requests yourself by using these values, or you can replace them with your own values. Altre informazioni su come ottenere la directory, l'applicazione e i criteri di Azure AD B2C personalizzati.Learn how to get your own Azure AD B2C directory, application, and policies.

Diagramma di protocolloProtocol diagram

Il flusso di accesso implicito è simile a quello illustrato nella figura seguente.The implicit sign-in flow looks something like the following figure. Ogni passaggio verrà descritto in dettaglio più avanti nell'articolo.Each step is described in detail later in the article.

Corsie di OpenID Connect

Invio di richieste di autenticazioneSend authentication requests

Quando l'app Web deve autenticare l'utente ed eseguire un criterio, indirizza l'utente all'endpoint /authorize.When your web app needs to authenticate the user and execute a policy, it directs 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. L'utente riceve un token ID dall'endpoint di Azure AD.The user gets an ID token from the Azure AD endpoint.

In questa richiesta il client indica nel parametro scope le autorizzazioni che deve acquisire dall'utente.In this request, the client indicates in the scope parameter the permissions that it needs to acquire from the user. Nel parametro p indica i criteri da eseguire.In the p parameter, it indicates the policy to execute. Di seguito vengono presentati tre esempi (con interruzioni di riga per migliorare la leggibilità), ognuno dei quali usa criteri diversi.The following three examples (with line breaks for readability) each use 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=id_token+token
&redirect_uri=https%3A%2F%2Faadb2cplayground.azurewebsites.net%2F
&response_mode=fragment
&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=id_token+token
&redirect_uri=https%3A%2F%2Faadb2cplayground.azurewebsites.net%2F
&response_mode=fragment
&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=id_token+token
&redirect_uri=https%3A%2F%2Faadb2cplayground.azurewebsites.net%2F
&response_mode=fragment
&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 nel portale di Azure.The application ID assigned to your app in the Azure portal.
response_typeresponse_type ObbligatoriaRequired Deve includere id_token per l'accesso a OpenID Connect.Must include id_token for OpenID Connect sign-in. Può anche includere il tipo di risposta token.It also can include the response type token. Se si usa token, l'app può ricevere immediatamente un token di accesso dall'endpoint di autorizzazione senza dover inviare una seconda richiesta a tale endpoint.If you use token, your app can immediately receive an access token from the authorize endpoint, without making a second request to the authorize endpoint. Se si usa il tipo di risposta token, il parametro scope deve contenere un ambito che indica la risorsa per cui emettere il token.If you use the token response type, the scope parameter must contain a scope that indicates which resource to issue the token for.
redirect_uriredirect_uri ConsigliatoRecommended URI di reindirizzamento dell'app dove le risposte di autenticazione possono essere inviate e ricevute dall'app.The redirect URI of your app, where authentication responses can be sent and received by your app. Deve corrispondere esattamente a uno degli URI di reindirizzamento registrati nel portale, ad eccezione del fatto che deve essere codificato come URL.It must exactly match one of the redirect URIs that you registered in the portal, except that it must be URL-encoded.
response_moderesponse_mode ConsigliatoRecommended Specifica il metodo da usare per restituire il token risultante all'app.Specifies the method to use to send the resulting token back to your app. Per i flussi impliciti, usare fragment.For implicit flows, use fragment.
scopescope ObbligatoriaRequired Elenco di ambiti separati da spazi.A space-separated list of scopes. Un valore per l'ambito indica ad Azure AD entrambe le autorizzazioni richieste.A single scope value indicates to Azure AD both of the 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. Verranno fornite informazioni più avanti in questo articolo. L’ambito offline_access è facoltativo per le applicazioni Web.(We'll talk about this more later in the article.) The offline_access scope is optional for web apps. Indica che l'app necessita di un token di aggiornamento per avere un accesso duraturo alle risorse.It indicates that your app needs a refresh token for long-lived access to resources.
statestate ConsigliatoRecommended Valore incluso nella richiesta che viene anche restituito nella risposta del token.A value included in the request that also is returned in the token response. Può trattarsi di una stringa di qualsiasi contenuto si voglia usare.It can be a string of any content that you want to use. Per evitare attacchi di richiesta intersito falsa, viene in genere usato un valore univoco generato casualmente.Usually, a randomly generated, unique value is used, to prevent 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, like the page they were on.
noncenonce ObbligatoriaRequired Valore incluso nella richiesta, generata dall'app, che viene incorporato nel token ID risultante come attestazione.A value included in the request (generated by the app) that is 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.Usually, the value is a randomized, unique string that can be used to identify the origin of the request.
pp ObbligatoriaRequired Criterio da eseguire.The policy to execute. Si tratta del nome di un criterio creato nel tenant di Azure AD B2C.It's the name of a policy that is created in your Azure AD B2C tenant. Il valore del nome dei criteri deve iniziare con b2c_1_.The policy name value should begin with b2c_1_. Per altre informazioni, vedere Criteri incorporati di Azure AD B2C.For more information, see Azure AD B2C built-in policies.
promptprompt FacoltativoOptional Tipo di interazione utente obbligatoria.The type of user interaction that's required. Al momento l'unico valore valido è login.Currently, the only valid value is login. L'utente è costretto a immettere le credenziali alla richiesta.This 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 effettuare qualsiasi altro passaggio.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. Le azioni dell'utente dipendono dal modo in cui sono definiti i criteri.User actions depend on how the policy is defined.

Dopo che l'utente ha completato i criteri, Azure AD restituisce una risposta per l'app in corrispondenza del valore usato per redirect_uri.After the user completes the policy, Azure AD returns a response to your app at the value you used for redirect_uri. Viene usato il metodo specificato nel parametro response_mode.It uses the method specified in the response_mode parameter. La risposta è esattamente la stessa per ogni scenario di azione dell'utente, indipendentemente dai criteri eseguiti.The response is exactly the same for each of the user action scenarios, independent of the policy that was executed.

Risposta con esito positivoSuccessful response

Una risposta con esito positivo che usa response_mode=fragment e response_type=id_token+token è simile a quanto riportato di seguito. Sono state aggiunte interruzioni di riga per migliorare la leggibilità:A successful response that uses response_mode=fragment and response_type=id_token+token looks like the following, with line breaks for legibility:

GET https://aadb2cplayground.azurewebsites.net/#
access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...
&token_type=Bearer
&expires_in=3599
&scope="90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6 offline_access",
&id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...
&state=arbitrary_data_you_sent_earlier
ParametroParameter DESCRIZIONEDescription
access_tokenaccess_token Token di accesso richiesto dall'app.The access token that the app requested. Il token di accesso non deve essere decodificato o controllato in altro modo,The access token should not be decoded or otherwise inspected. ma può essere trattato come una stringa opaca.It can be treated as an opaque string.
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.
expires_inexpires_in Periodo di validità del token di accesso (in secondi).The length of time that the access token is valid (in seconds).
scopescope Ambiti per i quali il token è valido.The scopes that the token is valid for. È possibile usare gli ambiti anche per memorizzare i token nella cache per un uso successivo.You also can use scopes to cache tokens for later use.
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. Per informazioni dettagliate sui token ID e sul relativo contenuto, vedere Azure AD B2C: informazioni di riferimento sui token.For more information about ID tokens and their contents, see the Azure AD B2C token reference.
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.

Risposta di erroreError response

Anche le risposte di errore possono essere inviate all'URI di reindirizzamento in modo che l'app possa gestirle adeguatamente:Error responses also can be sent to the redirect URI 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 usata per classificare i tipi di errore che si verificano.An error code string used to classify types of errors that occur. È inoltre possibile usare il codice di errore per la gestione degli errori.You also can use the error code for error handling.
error_descriptionerror_description Messaggio di errore specifico che consente di identificare la causa principale di un errore di autenticazione.A specific error message that can help you identify the root cause of an authentication error.
statestate Vedere la descrizione completa nella tabella precedente.See the full description in the preceding table. 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.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.Many open-source libraries are available for validating JWTs, depending on the language you prefer to use. È consigliabile prendere in esame le librerie open source disponibili anziché implementare una logica di convalida personalizzata.Consider exploring available open-source libraries rather than implementing your own validation logic. È possibile usare le informazioni contenute in questo articolo permettono di imparare a usare correttamente tali librerie.You can use the information in this article to help you learn how to properly use those libraries.

Azure AD B2C include un endpoint dei metadati di OpenID Connect.Azure AD B2C has an OpenID Connect metadata endpoint. Un'app può usare l'endpoint per recuperare informazioni su Azure AD B2C in fase di esecuzione.An app can use the endpoint 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 Azure AD B2C include un documento di metadati JSON per ogni criterio.There is a JSON metadata document for each policy in your Azure AD B2C tenant. Ad esempio, il documento di metadati per il criterio b2c_1_sign_in nel tenant fabrikamb2c.onmicrosoft.com si trova in:For example, the metadata document for the b2c_1_sign_in policy in the fabrikamb2c.onmicrosoft.com tenant is located at:

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

Una proprietà di questo documento di configurazione è jwks_uri.One of the properties of this configuration document is the jwks_uri. Il valore per lo stesso criterio sarebbe:The value for the same policy would be:

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

Per determinare quale criterio è stato usato per la firma di un token ID e la posizione da cui recuperare i metadati, sono disponibili due opzioni.To determine which policy was used to sign an ID token (and where to fetch the metadata from), you have two options. Prima di tutto, il nome del criterio è incluso nell'attestazione acr in id_token.First, the policy name is included in the acr claim in id_token. Per informazioni su come analizzare le attestazioni da un token ID, vedere Azure AD B2C: informazioni di riferimento sui token.For information about 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 emette la richiesta,Your other option is to encode the policy in the value of the state parameter when you issue the request. per poi decodificare il parametro state e determinare quali criteri sono stati usati.Then, decode the state parameter to determine which policy was used. Entrambi i metodi sono validi.Either method is valid.

Dopo aver acquisito il documento dei metadati dall'endpoint di 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 (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 time, each identified by a kid. Anche l'intestazione di id_token contiene un'attestazione kid,The header of id_token also contains a kid claim. che indica le chiavi usate per firmare il token ID.It indicates which of these keys was used to sign the ID token. Per altre informazioni, inclusa la convalida dei token, vedere Azure AD B2C: informazioni di riferimento sui token.For more information, including learning about validating tokens, see the Azure AD B2C token reference.

Dopo la convalida della firma del token ID sarà necessario verificare anche diverse altre attestazioni,After you validate the signature of the ID token, several claims require verification. Ad esempio: For example:

  • Convalidare l'attestazione nonce per impedire attacchi di riproduzione dei token.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.
  • Convalidare l'attestazione aud per verificare che il token ID sia stato emesso per l'app.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.
  • Convalidare le attestazioni iat e exp per verificare che il token ID non sia scaduto.Validate the iat and exp claims to ensure that the ID token has not expired.

Esistono anche diverse altre convalide che è opportuno eseguire, descritte in dettaglio nella specifica di OpenID Connect Core. È inoltre consigliabile convalidare attestazioni aggiuntive in base allo scenario.Several more validations that you should perform 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 abbia eseguito l'iscrizione all'app.Ensuring that the user or organization has signed up for the app.
  • Verificare che l'utente abbia le autorizzazioni e i privilegi adeguati.Ensuring that the user has proper authorization and 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 by using Azure Multi-Factor Authentication.

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

Dopo aver convalidato il token ID, è possibile avviare una sessione con l'utente.After you have completely validated the ID token, you can begin a session with the user. Usare nell'app le attestazioni del token ID per ottenere informazioni sull'utente.In your app, use the claims in the ID token to obtain information about the user. Queste informazioni possono essere usate per la visualizzazione, i record, le autorizzazioni e così via.This information can be used for display, records, authorization, and so on.

Ottenere i token di accessoGet access tokens

Se l'app Web deve solo eseguire criteri, è possibile saltare le prossime sezioni.If the only thing your web apps needs to do is execute policies, you can skip the next few sections. Le informazioni nelle sezioni seguenti sono applicabili solo alle app Web che devono eseguire chiamate autenticate a un'API Web e che sono protette da Azure AD B2C.The information in the following sections are applicable only to web apps that need to make authenticated calls to a web API, and which are protected by Azure AD B2C.

Dopo l'accesso dell'utente all'app a singola pagina, è possibile ottenere i token di accesso per chiamare le API Web protette da Azure AD.Now that you've signed the user in to your single-page app, you can get access tokens for calling web APIs that are secured by Azure AD. Anche se si è già ricevuto un token usando il tipo di risposta token, è possibile usare questo metodo per acquisire i token per risorse aggiuntive senza dover reindirizzare l'utente perché esegua di nuovo l'accesso.Even if you have already received a token by using the token response type, you can use this method to acquire tokens for additional resources without redirecting the user to sign in again.

In un tipico flusso di app Web, per eseguire questa operazione si invia una richiesta all'endpoint di /token.In a typical web app flow, you would do this by making a request to the /token endpoint. L'endpoint non supporta però le richieste CORS. Non è quindi possibile eseguire chiamate AJAX per ottenere e aggiornare i token.However, the endpoint does not support CORS requests, so making AJAX calls to get and refresh tokens is not an option. È possibile usare invece il flusso implicito in un elemento iframe HTML nascosto per ottenere nuovi token per altre API Web.Instead, you can use the implicit flow in a hidden HTML iframe element to get new tokens for other web APIs. Di seguito è riportato un esempio, con le interruzioni di riga per migliorare la leggibilità:Here's an example, with line breaks for legibility:


https://login.microsoftonline.com/fabrikamb2c.onmicrosoft.com/oauth2/v2.0/authorize?
client_id=90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6
&response_type=token
&redirect_uri=https%3A%2F%2Faadb2cplayground.azurewebsites.net%2F
&scope=https%3A%2F%2Fapi.contoso.com%2Ftasks.read
&response_mode=fragment
&state=arbitrary_data_you_can_receive_in_the_response
&nonce=12345
&prompt=none
&domain_hint=organizations
&login_hint=myuser@mycompany.com
&p=b2c_1_sign_in
ParametroParameter Obbligatorio?Required? DESCRIZIONEDescription
client_idclient_id ObbligatoriaRequired ID applicazione assegnato all'app nel portale di Azure.The application ID assigned to your app in the Azure portal.
response_typeresponse_type ObbligatoriaRequired Deve includere id_token per l'accesso a OpenID Connect.Must include id_token for OpenID Connect sign-in. Può anche includere il tipo di risposta token.It might also include the response type token. Se si usa token in questo momento, l'app può ricevere immediatamente un token di accesso dall'endpoint di autorizzazione senza dover inviare una seconda richiesta a tale endpoint.If you use token here, your app can immediately receive an access token from the authorize endpoint, without making a second request to the authorize endpoint. Se si usa il tipo di risposta token, il parametro scope deve contenere un ambito che indica la risorsa per cui emettere il token.If you use the token response type, the scope parameter must contain a scope that indicates which resource to issue the token for.
redirect_uriredirect_uri ConsigliatoRecommended URI di reindirizzamento dell'app dove le risposte di autenticazione possono essere inviate e ricevute dall'app.The redirect URI of your app, where authentication responses can be sent and received by your app. Deve corrispondere esattamente a uno degli URI di reindirizzamento registrati nel portale, ad eccezione del fatto che deve essere codificato come URL.It must exactly match one of the redirect URIs you registered in the portal, except that it must be URL-encoded.
scopescope ObbligatoriaRequired Elenco di ambiti separati da spazi.A space-separated list of scopes. Per ottenere i token, includere tutti gli ambiti necessari per la risorsa di interesse.For getting tokens, include all scopes that you require for the intended resource.
response_moderesponse_mode ConsigliatoRecommended Specifica il metodo usato per restituire il token risultante all'app.Specifies the method that is used to send the resulting token back to your app. Può essere query, form_post o fragment.Can be query, form_post, or fragment.
statestate ConsigliatoRecommended Valore incluso nella richiesta che viene restituito nella risposta del token.A value included in the request that is returned in the token response. Può trattarsi di una stringa di qualsiasi contenuto si voglia usare.It can be a string of any content that you want to use. Per evitare attacchi di richiesta intersito falsa, viene in genere usato un valore univoco generato casualmente.Usually, a randomly generated, unique value is used, to prevent cross-site request forgery attacks. Anche lo stato viene usato per codificare le informazioni sullo stato dell'utente nell'app prima del verificarsi della richiesta di autenticazione,The state also is used to encode information about the user's state in the app before the authentication request occurred. ad esempio, la pagina o la vista in cui si trovava l'utente.For example, the page or view the user was on.
noncenonce ObbligatoriaRequired Valore incluso nella richiesta, generata dall'app, che viene incluso nel token ID risultante come attestazione.A value included in the request, generated by the app, that is 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 identifica l'origine della richiesta.Usually, the value is a randomized, unique string that identifies the origin of the request.
promptprompt ObbligatoriaRequired Per aggiornare e ottenere i token in un iframe nascosto, usare prompt=none per fare in modo che l'iframe non si blocchi alla pagina di accesso e risponda immediatamente.To refresh and get tokens in a hidden iframe, use prompt=none to ensure that the iframe does not get stuck on the sign-in page, and returns immediately.
login_hintlogin_hint ObbligatoriaRequired Per aggiornare e ottenere i token in un iframe nascosto, includere il nome utente dell'utente in questo hint per distinguere tra le eventuali varie sessioni dell'utente in un determinato momento.To refresh and get tokens in a hidden iframe, include the username of the user in this hint to distinguish between multiple sessions the user might have at a given time. È possibile estrarre il nome utente da un accesso precedente usando l'attestazione preferred_username.You can extract the username from an earlier sign-in by using the preferred_username claim.
domain_hintdomain_hint ObbligatoriaRequired Può essere consumers o organizations.Can be consumers or organizations. Per aggiornare e ottenere i token in un iframe nascosto, è necessario includere il valore domain_hint nella richiesta.For refreshing and getting tokens in a hidden iframe, you must include the domain_hint value in the request. Estrarre l'attestazione tid dal token ID di un accesso precedente per determinare il valore da usare.Extract the tid claim from the ID token of an earlier sign-in to determine which value to use. Se il valore dell'attestazione tid è 9188040d-6c67-4c5b-b112-36a304b66dad, usare domain_hint=consumers.If the tid claim value is 9188040d-6c67-4c5b-b112-36a304b66dad, use domain_hint=consumers. In caso contrario, usare domain_hint=organizations.Otherwise, use domain_hint=organizations.

Impostando il parametro prompt=none, la richiesta ha immediatamente esito positivo o negativo e torna all'applicazione.By setting the prompt=none parameter, this request either succeeds or fails immediately, and returns to your application. Una risposta con esito positivo verrà inviata all'app all'URI di reindirizzamento indicato, usando il metodo specificato nel parametro response_mode.A successful response is sent to your app at the indicated redirect URI, by using the method specified in the response_mode parameter.

Risposta con esito positivoSuccessful response

La risposta con esito positivo quando si usa response_mode=fragment è simile alla seguente:A successful response by using response_mode=fragment looks like this:

GET https://aadb2cplayground.azurewebsites.net/#
access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...
&state=arbitrary_data_you_sent_earlier
&token_type=Bearer
&expires_in=3599
&scope=https%3A%2F%2Fapi.contoso.com%2Ftasks.read
ParametroParameter DESCRIZIONEDescription
access_tokenaccess_token Token richiesto dall'app.The token that the app requested.
token_typetoken_type Il tipo di token sarà sempre una connessione.The token type will always be Bearer.
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.
expires_inexpires_in Validità del token di accesso (espressa in secondi).How long the access token is valid (in seconds).
scopescope Ambiti per i quali il token di accesso è valido.The scopes that the access token is valid for.

Risposta di erroreError response

Anche le risposte di errore possono essere inviate all'URI di reindirizzamento in modo che l'app possa gestirle adeguatamente.Error responses also can be sent to the redirect URI so that the app can handle them appropriately. Per prompt=none un errore previsto è simile al seguente:For prompt=none, an expected error looks like this:

GET https://aadb2cplayground.azurewebsites.net/#
error=user_authentication_required
&error_description=the+request+could+not+be+completed+silently
ParametroParameter DESCRIZIONEDescription
errorerror Stringa di codice di errore che può essere usata per classificare i tipi di errore che si verificano.An error code string that can be used to classify types of errors that occur. È possibile usare la stringa anche per rispondere agli errori.You also can use the string to react to errors.
error_descriptionerror_description Messaggio di errore specifico che consente di identificare la causa principale di un errore di autenticazione.A specific error message that can help you identify the root cause of an authentication error.

Se si riceve questo errore nella richiesta iframe, l'utente deve accedere di nuovo in modo interattivo per recuperare un nuovo token.If you receive this error in the iframe request, the user must interactively sign in again to retrieve a new token. È possibile gestire questa condizione in modo appropriato per l'applicazione.You can handle this in a way that makes sense for your application.

Token di aggiornamentoRefresh tokens

Token ID e token di accesso scadono entrambi dopo un breve periodo di tempo.ID tokens and access tokens both expire after a short period of time. L'app deve essere predisposta ad aggiornare periodicamente questi token.Your app must be prepared to refresh these tokens periodically. Per aggiornare entrambi i tipi di token, eseguire la stessa richiesta nell'iframe nascosto usata in un esempio precedente tramite il parametro prompt=none per controllare i passaggi di Azure AD.To refresh either type of token, perform the same hidden iframe request we used in an earlier example, by using the prompt=none parameter to control Azure AD steps. Per ricevere un nuovo valore id_token, assicurarsi di usare response_type=id_token, scope=openid e un parametro nonce.To receive a new id_token value, be sure to use response_type=id_token and scope=openid, and a nonce parameter.

Inviare una richiesta di disconnessioneSend a sign-out request

Per disconnettere l'utente dall'app, reindirizzare l'utente alla disconnessione da Azure AD. In caso contrario, l'utente potrebbe essere in grado di autenticarsi nuovamente all'app senza immettere le credenziali,When you want to sign the user out of the app, redirect the user to Azure AD to sign out. If you don't do this, 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'oggetto end_session_endpoint elencato nello stesso documento dei metadati di OpenID Connect descritto in Convalidare il token ID.You can simply redirect the user to the end_session_endpoint that is listed in the same OpenID Connect metadata document described in Validate the ID token. Ad esempio: For example:

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 ObbligatoriaRequired Criteri da usare per disconnettere l'utente dall'applicazione.The policy 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, Azure AD B2C visualizzerà un messaggio generico.The URL that the user should be redirected to after successful sign-out. If it is not included, Azure AD B2C displays a generic message to the user.

Nota

Anche se indirizzare l'utente a end_session_endpoint permette di cancellare parte dello stato Single Sign-On dell'utente con Azure AD B2C,Directing the user to the end_session_endpoint clears some of the user's single sign-on state with Azure AD B2C. l'utente non viene disconnesso dalla sessione del provider di identità basato su social network.However, it doesn't sign the user out of the user's social identity provider 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 identify provider during a subsequent sign-in, the user is reauthenticated, without entering their credentials. Se un utente vuole disconnettersi dall'applicazione Azure AD B2C, non significa necessariamente che intenda, ad esempio, disconnettersi del tutto dall'account Facebook.If a user wants to sign out of your Azure AD B2C application, it does not necessarily mean they want to completely sign out of their Facebook account, for example. Tuttavia, per gli account locali, la sessione dell'utente viene terminata in modo corretto.However, for local accounts, the user's session will be ended properly.

Usare il tenant personale di Azure AD B2CUse your own Azure AD B2C tenant

Per provare queste richieste, completare i tre passaggi seguenti.To try these requests yourself, complete the following three steps. Sostituire i valori dell'esempio usato in questo articolo con valori personalizzati:Replace the example values we use in this article with your own values:

  1. Creare un tenant di Azure AD B2C.Create an Azure AD B2C tenant. Usare il nome del tenant nelle richieste.Use the name of your tenant in the requests.
  2. Creare un'applicazione per ottenere un ID applicazione e un valore redirect_uri.Create an application to obtain an application ID and a redirect_uri value. Includere un'API Web o un'app Web nell'app.Include a web app or web API in your app. Se lo si desidera, è possibile creare un segreto dell'applicazione.Optionally, you can create an application secret.
  3. Creare i criteri per ottenere i nomi dei criteri.Create your policies to obtain your policy names.

EsempiSamples