Protocolli della versione 2.0: applicazioni a singola pagina che usano il flusso implicitov2.0 Protocols - SPAs using the implicit flow

Con l'endpoint v2.0 è possibile far accedere gli utenti alle app a singola pagina con account Microsoft sia personali che aziendali o dell'istituto di istruzione.With the v2.0 endpoint, you can sign users into your single page apps with both personal and work/school accounts from Microsoft. Le app a pagina singola e le altre app JavaScript che vengono eseguite soprattutto in un browser presentano alcune problematiche interessanti nell'ambito dell'autenticazione:Single page and other JavaScript apps that run primarily in a browser face a few interesting challenges when it comes to 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.Many authorization servers & identity providers do not support CORS requests.
  • I reindirizzamenti dei browser a pagina intera dall'app diventano fastidiosi per l'esperienza utente.Full page browser redirects away from the app become particularly invasive to the user experience.

Per queste applicazioni (ad esempio, AngularJS, Ember.js, React.js e così via) Azure AD supporta il flusso di concessione implicita di OAuth 2.0.For these applications (think: AngularJS, Ember.js, React.js, etc) Azure AD supports the OAuth 2.0 Implicit Grant flow. Il flusso implicito è descritto nella specifica di OAuth 2.0.The implicit flow is described in the OAuth 2.0 Specification. Il principale vantaggio è che consente all'app di ottenere i token da Azure AD senza eseguire uno scambio di credenziali del server back-end.Its primary benefit is that it allows the app to get tokens from Azure AD without performing a backend server credential exchange. In questo modo l'app può far accedere l'utente, gestire la sessione e ottenere i token per altre API Web, il tutto nel codice JavaScript client.This allows the app to sign in the user, maintain session, and get tokens to other web APIs all within the client JavaScript code. Esistono alcune importanti osservazioni sulla sicurezza da considerare quando si usa il flusso implicito, in particolare per la rappresentazione del client e dell'utente.There are a few important security considerations to take into account when using the implicit flow - specifically around client and user impersonation.

Per usare il flusso implicito e Azure AD per aggiungere l'autenticazione all'app JavaScript, è consigliabile usare la libreria JavaScript open source, adal.js.If you want to use the implicit flow and Azure AD to add authentication to your JavaScript app, we recommend you use our open source JavaScript library, adal.js. Qui sono disponibili alcune esercitazioni introduttive su AngularJS.There are few AngularJS tutorials available here to help you get started.

Se, tuttavia, si preferisce non usare una libreria nell'app a pagina singola e inviare manualmente i messaggi dei protocolli, seguire questi passaggi generali.However, if you would prefer not to use a library in your single page app and send protocol messages yourself, follow the general steps below.

Nota

Non tutti gli scenari e le funzionalità di Azure Active Directory sono supportati dall'endpoint 2.0.Not all Azure Active Directory scenarios & features are supported by the v2.0 endpoint. Per determinare se è necessario usare l'endpoint v2.0, leggere le informazioni sulle limitazioni v2.0.To determine if you should use the v2.0 endpoint, read about v2.0 limitations.

Diagramma di protocolloProtocol diagram

L'intero flusso di accesso implicito è simile al seguente: i singoli passaggi sono descritti in dettaglio di seguito.The entire implicit sign in flow looks something like this - each of the steps are described in detail below.

Corsie di OpenID Connect

Inviare la richiesta di accessoSend the sign-in request

Per l'accesso iniziale dell'utente all'app, è possibile inviare una richiesta di autorizzazione OpenID Connect e ottenere un id_token dall'endpoint 2.0:To initially sign the user into your app, you can send an OpenID Connect authorization request and get an id_token from the v2.0 endpoint:

// Line breaks for legibility only

https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&response_type=id_token+token
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&scope=openid%20https%3A%2F%2Fgraph.microsoft.com%2Fmail.read
&response_mode=fragment
&state=12345
&nonce=678910

Suggerimento

Fare clic sul collegamento seguente per eseguire questa richiesta.Click the link below to execute this request! Dopo l'accesso, il browser deve essere reindirizzato a https://localhost/myapp/ con un id_token nella barra degli indirizzi.After signing in, your browser should be redirected to https://localhost/myapp/ with a id_token in the address bar. https://login.microsoftonline.com/common/oauth2/v2.0/authorize...https://login.microsoftonline.com/common/oauth2/v2.0/authorize...

ParametroParameter DescrizioneDescription
tenanttenant Obbligatoriarequired Il valore {tenant} del percorso della richiesta può essere usato per controllare chi può accedere all'applicazione.The {tenant} value in the path of the request can be used to control who can sign into the application. I valori consentiti sono common, organizations, consumers e gli identificatori del tenant.The allowed values are common, organizations, consumers, and tenant identifiers. Per altre informazioni, vedere le nozioni di base sul protocollo.For more detail, see protocol basics.
client_idclient_id Obbligatoriarequired ID applicazione che il portale di registrazione (apps.dev.microsoft.com) ha assegnato all'app.The Application Id that the registration portal (apps.dev.microsoft.com) assigned your app.
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 token come response_type.It may also include the response_type token. Usando qui il token , l'app può ricevere immediatamente un token di accesso dall'endpoint di autorizzazione senza dover inviare una seconda richiesta a tale endpoint.Using token here will allow your app to receive an access token immediately from the authorize endpoint without having to make a second request to the authorize endpoint. Se si usa il token come response_type, 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 indicating 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 it must be url encoded.
scopescope Obbligatoriarequired Elenco di ambiti separati da spazi.A space-separated list of scopes. Per OpenID Connect, deve includere l'ambito openidche esegue la conversione all'autorizzazione per l'accesso nell'interfaccia utente di consenso.For OpenID Connect, it must include the scope openid, which translates to the "Sign you in" permission in the consent UI. Facoltativamente, è anche possibile includere l'ambito email o profile per ottenere l'accesso a dati aggiuntivi dell'utente.Optionally you may also want to include the email or profile scopes for gaining access to additional user data. È anche possibile includere altri ambiti in questa richiesta per richiedere il consenso per varie risorse.You may also include other scopes in this request for requesting consent to various resources.
response_moderesponse_mode Consigliatorecommended Specifica il metodo da usare per restituire il token risultante all'app.Specifies the method that should be used to send the resulting token back to your app. Deve essere fragment per il flusso implicito.Should be fragment for the implicit flow.
statestate Consigliatorecommended Valore incluso nella richiesta che verrà restituito anche nella risposta del token.A value included in the request that will also be returned in the token response. Può trattarsi di una stringa di qualsiasi contenuto.It can be a string of any content that you wish. 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 o la vista 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 or view they were on.
noncenonce Obbligatoriarequired Valore incluso nella richiesta, generata 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.
promptprompt Facoltativaoptional Indica il tipo di interazione obbligatoria dell'utente.Indicates the type of user interaction that is required. Gli unici valori validi al momento sono "login", "none" e "consent".The only valid values at this time are 'login', 'none', and 'consent'. prompt=login forza l'utente a immettere le sue credenziali alla richiesta, negando l'accesso Single Sign-On.prompt=login will force the user to enter their credentials on that request, negating single-sign on. prompt=none è l'opposto: garantisce che all'utente non venga presentata alcuna richiesta interattiva.prompt=none is the opposite - it will ensure that the user is not presented with any interactive prompt whatsoever. Se la richiesta non può essere completata automaticamente tramite Single-Sign-On, l'endpoint 2.0 restituirà un errore.If the request cannot be completed silently via single-sign on, the v2.0 endpoint will return an error. prompt=consent attiverà la finestra di dialogo di consenso di OAuth dopo l'accesso dell'utente, che chiede all'utente di concedere le autorizzazioni all'app.prompt=consent will trigger the OAuth consent dialog after the user signs in, asking the user to grant permissions to the app.
login_hintlogin_hint Facoltativooptional Consente di pre-compilare il campo nome utente/indirizzo di posta elettronica dell'utente nella pagina di accesso, se già si conosce il nome utente.Can be used to pre-fill the username/email address field of the sign in page for the user, if you know their username ahead of time. Le app usano spesso questo parametro durante la riautenticazione, dopo aver estratto il nome utente da un accesso precedente tramite l'attestazione preferred_username.Often apps will use this parameter during re-authentication, having already extracted the username from a previous sign-in using the preferred_username claim.
domain_hintdomain_hint Facoltativaoptional Può essere uno di consumers o organizations.Can be one of consumers or organizations. Se incluso, non verrà eseguito il processo di individuazione basata sulla posta elettronica a cui viene sottoposto l'utente nella pagina di accesso della versione 2.0. Questo comporta un'esperienza utente leggermente semplificata.If included, it will skip the email-based discovery process that user goes through on the v2.0 sign in page, leading to a slightly more streamlined user experience. Le app usano spesso questo parametro durante la riautenticazione, estraendo l'attestazione tid dall'id_token.Often apps will use this parameter during re-authentication, by extracting the tid claim from the id_token. 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, you should use domain_hint=consumers. In caso contrario, usare domain_hint=organizations.Otherwise, use domain_hint=organizations.

A questo punto, all'utente viene chiesto di immettere le credenziali e completare l'autenticazione.At this point, the user will be asked to enter their credentials and complete the authentication. L'endpoint 2.0 assicura anche che l'utente abbia fornito il consenso per le autorizzazioni indicate nel parametro di query scope .The v2.0 endpoint will also ensure that the user has consented to the permissions indicated in the scope query parameter. Se l'utente non ha acconsentito a nessuna di queste autorizzazioni, l'endpoint chiederà all'utente di fornire il consenso per le autorizzazioni obbligatorie.If the user has not consented to any of those permissions, it will ask the user to consent to the required permissions. Questo articolo contiene informazioni dettagliate su autorizzazioni, consenso e app multi-tenant.Details of permissions, consent, and multi-tenant apps are provided here.

Dopo che l'utente viene autenticato e fornisce il consenso, l'endpoint 2.0 restituisce una risposta all'app nell'URI redirect_uri, usando il metodo specificato nel parametro response_mode.Once the user authenticates and grants consent, the v2.0 endpoint will return a response to your app at the indicated redirect_uri, using the method specified in the response_mode parameter.

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 using response_mode=fragment and response_type=id_token+token looks like the following, with line breaks for legibility:

GET https://localhost/myapp/#
access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...
&token_type=Bearer
&expires_in=3599
&scope=https%3a%2f%2fgraph.microsoft.com%2fmail.read 
&id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...
&state=12345
ParametroParameter DescrizioneDescription
access_tokenaccess_token Incluso se response_type include token.Included if response_type includes token. Token di accesso richiesto dall'app, in questo caso per Microsoft Graph.The access token that the app requested, in this case for the Microsoft Graph. Il token di accesso non deve essere decodificato o controllato in altro modo ma può essere trattato come una stringa opaca.The access token should not be decoded or otherwise inspected, it can be treated as an opaque string.
token_typetoken_type Incluso se response_type include token.Included if response_type includes token. È sempre Bearer.Will always be Bearer.
expires_inexpires_in Incluso se response_type include token.Included if response_type includes token. Indica il numero di secondi di validità del token, ai fini della memorizzazione nella cache.Indicates the number of seconds the token is valid, for caching purposes.
scopescope Incluso se response_type include token.Included if response_type includes token. Indica gli ambiti per cui access_token è valido.Indicates the scope(s) for which the access_token will be valid.
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. Informazioni dettagliate sui token ID e il relativo contenuto sono incluse nel riferimento al token dell'endpoint 2.0.More details on id_tokens and their contents is included in the v2.0 endpoint token reference.
statestate Se un parametro di stato è incluso nella richiesta, lo stesso valore viene 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 dello stato 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

Le risposte di errore possono essere inviate anche a redirect_uri , in modo che l'app possa gestirle adeguatamente:Error responses may also be sent to the redirect_uri so the app can handle them appropriately:

GET https://localhost/myapp/#
error=access_denied
&error_description=the+user+canceled+the+authentication
ParametroParameter DescrizioneDescription
errorerror Stringa di codice di errore che può essere usata per classificare i tipi di errori che si verificano e correggerli.An error code string that can be used to classify types of errors that occur, and 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.

Convalidare il token IDValidate the id_token

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

È possibile scegliere di convalidare id_token nel codice client, ma una procedura comune consiste nell'inviare id_token a un server back-end dove verrà eseguita la convalida.You can choose to validate the id_token in client code, but a common practice is to send the id_token to a backend server and perform the validation there. Dopo aver convalidato la firma dell'id_token, è necessario verificare alcune attestazioni.Once you've validated the signature of the id_token, there are a few claims you will be required to verify. Per altre informazioni, ad esempio relative alla convalida del token e al rollover della chiave di firma, vedere il riferimento al token della versione 2.0.See the v2.0 token reference for more information, including Validating Tokens and Important Information About Signing Key Rollover. È consigliabile usare una libreria per l'analisi e la convalida dei token. È disponibile almeno una libreria per la maggior parte dei linguaggi e delle piattaforme.We recommend making use of a library for parsing and validating tokens - there is at least one available for most languages and platforms.

È inoltre consigliabile convalidare attestazioni aggiuntive in base allo scenario.You may also wish to validate additional claims depending on your scenario. Alcune convalide comuni includono:Some common validations include:

  • Garantire che l'utente o l'organizzazione dispongano dell'iscrizione all'app.Ensuring the user/organization has signed up for the app.
  • Garantire che l'utente disponga di autorizzazioni/privilegi adeguati.Ensuring the user has proper authorization/privileges
  • Garantire che sia stato applicato un determinato livello di autenticazione, ad esempio l'autenticazione a più fattori.Ensuring a certain strength of authentication has occurred, such as multi-factor authentication.

Per altre informazioni sulle attestazioni in un token ID, vedere il riferimento al token dell'endpoint v2.0.For more information on the claims in an id_token, see the v2.0 endpoint token reference.

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

Ottenere i token di accessoGet access tokens

Dopo avere fatto accedere l'utente all'app a pagina singola, è possibile ottenere i token di accesso per chiamare le API Web protette da Azure AD, ad esempio Microsoft Graph.Now that you've signed the user into your single page app, you can get access tokens for calling web APIs secured by Azure AD, such as the Microsoft Graph. Anche se si è già ricevuto un token usando il token response_type, è 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 already received a token using the token response_type, you can use this method to acquire tokens to additional resources without having to redirect the user to sign in again.

Nel normale flusso OpenID Connect/OAuth, per eseguire questa operazione, si effettua una richiesta all'endpoint /token 2.0.In the normal OpenID Connect/OAuth flow, you would do this by making a request to the v2.0 /token endpoint. L'endpoint 2.0 non supporta però le richieste CORS e quindi non è possibile effettuare una chiamata ad AJAX per ottenere e aggiornare i token.However, the v2.0 endpoint does not support CORS requests, so making AJAX calls to get and refresh tokens is out of the question. È possibile usare invece il flusso implicito in un iframe nascosto per ottenere nuovi token per altre API Web:Instead, you can use the implicit flow in a hidden iframe to get new tokens for other web APIs:

// Line breaks for legibility only

https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&response_type=token
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&scope=https%3A%2F%2Fgraph.microsoft.com%2Fmail.read&response_mode=fragment
&state=12345&nonce=678910
&prompt=none
&domain_hint=organizations
&login_hint=myuser@mycompany.com

Suggerimento

Provare a copiare e incollare questa richiesta in una scheda del browser.Try copy & pasting the below request into a browser tab! (Non dimenticare di sostituire i valori domain_hint e login_hint con i valori corretti per l'utente)(Don't forget to replace the domain_hint and the login_hint values with the correct values for your user)

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=6731de76-14a6-49ae-97bc-6eba6914391e&response_type=token&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F&scope=https%3A%2F%2Fgraph.microsoft.com%2Fmail.read&response_mode=fragment&state=12345&nonce=678910&prompt=none&domain_hint={{consumers-or-organizations}}&login_hint={{your-username}}
ParametroParameter DescrizioneDescription
tenanttenant Obbligatoriarequired Il valore {tenant} del percorso della richiesta può essere usato per controllare chi può accedere all'applicazione.The {tenant} value in the path of the request can be used to control who can sign into the application. I valori consentiti sono common, organizations, consumers e gli identificatori del tenant.The allowed values are common, organizations, consumers, and tenant identifiers. Per altre informazioni, vedere le nozioni di base sul protocollo.For more detail, see protocol basics.
client_idclient_id Obbligatoriarequired ID applicazione che il portale di registrazione (apps.dev.microsoft.com) ha assegnato all'app.The Application Id that the registration portal (apps.dev.microsoft.com) assigned your app.
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 altri parametri response_type, ad esempio code.It may also include other response_types, such as code.
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 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 you require for the resource of interest.
response_moderesponse_mode Consigliatorecommended Specifica il metodo da usare per restituire il token risultante all'app.Specifies the method that should be used to send the resulting token back to your app. Può essere uno di query, form_post o fragment.Can be one of query, form_post, or fragment.
statestate Consigliatorecommended Valore incluso nella richiesta che verrà restituito anche nella risposta del token.A value included in the request that will also be returned in the token response. Può trattarsi di una stringa di qualsiasi contenuto.It can be a string of any content that you wish. 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 o la vista 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 or view they were on.
noncenonce Obbligatoriarequired Valore incluso nella richiesta, generata 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.
promptprompt Obbligatoriarequired Per aggiornare e ottenere i token in un iframe nascosto, è necessario usare prompt=none per fare in modo che iframe non si blocchi alla pagina di accesso della versione 2.0 e risponda immediatamente.For refreshing & getting tokens in a hidden iframe, you should use prompt=none to ensure that the iframe does not hang on the v2.0 sign in page, and returns immediately.
login_hintlogin_hint Obbligatoriarequired Per aggiornare e ottenere i token in un iframe nascosto, è necessario includere il nome utente dell'utente in questo hint per distinguere tra le eventuali varie sessioni dell'utente in un determinato momento.For refreshing & getting tokens in a hidden iframe, you must include the username of the user in this hint in order to distinguish between multiple sessions the user may have at a given point in time. È possibile estrarre il nome utente da un accesso precedente usando l'attestazione preferred_username.You can extract the username from a previous sign-in using the preferred_username claim.
domain_hintdomain_hint Obbligatoriarequired Può essere uno di consumers o organizations.Can be one of consumers or organizations. Per aggiornare e ottenere i token in un iframe nascosto, è necessario includere domain_hint nella richiesta.For refreshing & getting tokens in a hidden iframe, you must include the domain_hint in the request. È necessario estrarre l'attestazione tid dall'id_token di un accesso precedente per determinare il valore da usare.You should extract the tid claim from the id_token of a previous 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, you should use domain_hint=consumers. In caso contrario, usare domain_hint=organizations.Otherwise, use domain_hint=organizations.

Con il parametro prompt=none , questa richiesta avrà immediatamente esito positivo o negativo e farà tornare all'applicazione.Thanks to the prompt=none parameter, this request will either succeed or fail immediately and return to your application. Un risposta con esito positivo verrà inviata all'app all'indirizzo redirect_uri indicato, usando il metodo specificato nel parametro response_mode.A successful response will be sent to your app at the indicated redirect_uri, using the method specified in the response_mode parameter.

Risposta con esito positivoSuccessful response

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

GET https://localhost/myapp/#
access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...
&state=12345
&token_type=Bearer
&expires_in=3599
&scope=https%3A%2F%2Fgraph.windows.net%2Fdirectory.read
ParametroParameter DescrizioneDescription
access_tokenaccess_token Token richiesto dall'app.The token that the app requested.
token_typetoken_type È sempre Bearer.Will always be Bearer.
statestate Se un parametro di stato è incluso nella richiesta, lo stesso valore viene 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 dello stato 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

Le risposte di errore possono essere inviate anche a redirect_uri , in modo che l'app possa gestirle adeguatamente.Error responses may also be sent to the redirect_uri so the app can handle them appropriately. Nel caso di prompt=none, un errore previsto sarà:In the case of prompt=none, an expected error will be:

GET https://localhost/myapp/#
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 errori che si verificano e correggerli.An error code string that can be used to classify types of errors that occur, and 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.

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 scegliere di gestire questa situazione in qualsiasi modo appropriato per l'applicazione.You can choose to handle this case in whatever way makes sense for your application.

Aggiornare i tokenRefreshing tokens

I token id_token e access_token scadranno dopo un breve periodo, quindi l'app deve essere preparata per aggiornare regolarmente questi token.Both id_tokens and access_tokens will expire after a short period of time, so your app must be prepared to refresh these tokens periodically. Per aggiornare entrambi i tipi di token, è possibile eseguire la stessa richiesta nell'iframe nascosto precedente usando il parametro prompt=none per controllare il comportamento di Azure AD.To refresh either type of token, you can perform the same hidden iframe request from above using the prompt=none parameter to control Azure AD's behavior. Per ricevere un nuovo id_token, assicurarsi di usare response_type=id_token e scope=openid, oltre al parametro nonce.If you want to receive a new id_token, be sure to use response_type=id_token and scope=openid, as well as a nonce parameter.

Invio di una richiesta di disconnessioneSend a sign out request

end_session_endpoint di OpenID Connect consente all'app di inviare una richiesta all'endpoint 2.0 per terminare una sessione utente e cancellare i cookie impostati dall'endpoint 2.0.The OpenIdConnect end_session_endpoint allows your app to send a request to the v2.0 endpoint to end a user's session and clear cookies set by the v2.0 endpoint. Per disconnettere completamente un utente da un'applicazione Web, l'app deve terminare la sessione in cui è presente l'utente (in genere cancellando la cache di un token o eliminando i cookie) e quindi reindirizzare il browser all'indirizzo seguente:To fully sign a user out of a web application, your app should end its own session with the user (usually by clearing a token cache or dropping cookies), and then redirect the browser to:

https://login.microsoftonline.com/{tenant}/oauth2/v2.0/logout?post_logout_redirect_uri=https://localhost/myapp/
ParametroParameter DescrizioneDescription
tenanttenant Obbligatoriarequired Il valore {tenant} del percorso della richiesta può essere usato per controllare chi può accedere all'applicazione.The {tenant} value in the path of the request can be used to control who can sign into the application. I valori consentiti sono common, organizations, consumers e gli identificatori del tenant.The allowed values are common, organizations, consumers, and tenant identifiers. Per altre informazioni, vedere le nozioni di base sul protocollo.For more detail, see protocol basics.
post_logout_redirect_uripost_logout_redirect_uri consigliatorecommended URL di destinazione al quale l'utente deve essere reindirizzato dopo la disconnessione.The URL that the user should be returned to after logout completes. Questo valore deve corrispondere a uno degli URI di reindirizzamento registrati per l'applicazione.This value must match one of the redirect URIs registered for the application. In caso contrario, all'utente verrà visualizzato un messaggio generico da parte dell'endpoint 2.0.If not included, the user will be shown a generic message by the v2.0 endpoint.