Microsoft Identity Platform und der Flow für die implizite GenehmigungMicrosoft identity platform and implicit grant flow

Microsoft Identity Platform unterstützt den Flow für die implizite Genehmigung von OAuth 2.0, der in der OAuth 2.0-Spezifikation beschrieben ist.The Microsoft identity platform supports the OAuth 2.0 Implicit Grant flow as described in the OAuth 2.0 Specification. Das definierende Merkmal der impliziten Genehmigung ist, dass Token (ID-Token oder Zugriffstoken) nicht über den Tokenendpunkt, sondern direkt über den Autorisierungsendpunkt zurückgegeben werden.The defining characteristic of the implicit grant is that tokens (ID tokens or access tokens) are returned directly from the /authorize endpoint instead of the /token endpoint. Dies wird häufig im Rahmen des Autorisierungscodeflows genutzt und als „hybrider Flow“ bezeichnet. Hierbei wird das ID-Token bei der Autorisierungsanforderung zusammen mit einem Autorisierungscode abgerufen.This is often used as part of the authorization code flow, in what is called the "hybrid flow" - retrieving the ID token on the /authorize request along with an authorization code.

In diesem Artikel erfahren Sie, wie Sie direkt für das Protokoll in Ihrer Anwendung programmieren, um Token von Azure AD anzufordern.This article describes how to program directly against the protocol in your application to request tokens from Azure AD. Es wird stattdessen empfohlen, ggf. die unterstützten Microsoft Authentication Libraries (MSAL) zu verwenden, um Token zu erhalten und gesicherte Web-APIs aufzurufen.When possible, we recommend you use the supported Microsoft Authentication Libraries (MSAL) instead to acquire tokens and call secured web APIs. Sehen Sie sich auch die Beispiel-Apps an, die MSAL verwenden.Also take a look at the sample apps that use MSAL.

Empfohlene Verwendung des AutorisierungscodeflowsPrefer the auth code flow

Da geplant ist, Drittanbietercookies aus Browsern zu entfernen, ist der Flow für die implizite Genehmigung keine geeignete Authentifizierungsmethode mehr.With the plans for third party cookies to be removed from browsers, the implicit grant flow is no longer a suitable authentication method. Da die SSO-Hintergrundfeatures des Flows für die implizite Genehmigung nicht ohne Drittanbietercookies funktionieren, tritt für Anwendungen ein Fehler auf, wenn diese ein neues Token abrufen möchten.The silent SSO features of the implicit flow do not work without third party cookies, causing applications to break when they attempt to get a new token. Wir empfehlen Ihnen dringend, für alle neuen Anwendungen anstelle des Flows für die implizite Genehmigung den Autorisierungscodeflow zu verwenden, für den jetzt Single-Page-Apps unterstützt werden. Darüber hinaus ist es ratsam, auch für vorhandene Single-Page-Apps mit der Migration zum Autorisierungscodeflow zu beginnen.We strongly recommend that all new applications use the authorization code flow that now supports single page apps in place of the implicit flow, and that existing single page apps begin migrating to the authorization code flow as well.

Geeignete Szenarien für die implizite OAuth2-GenehmigungSuitable scenarios for the OAuth2 implicit grant

Die implizite Genehmigung ist nur für den ersten interaktiven Teil Ihres Anmeldevorgangs zuverlässig, bei dem das Fehlen der Drittanbietercookies keine Beeinträchtigung Ihrer Anwendung bewirkt.The implicit grant is only reliable for the initial, interactive portion of your sign in flow, where the lack of third party cookies cannot impact your application. Diese Einschränkung bedeutet, dass Sie diesen Ansatz ausschließlich im Rahmen des hybriden Flows verwenden sollten, bei dem Ihre Anwendung einen Code und ein Token vom Autorisierungsendpunkt anfordert.This limitation means you should use it exclusively as part of the hybrid flow, where your application requests a code as well as a token from the authorization endpoint. So ist dafür gesorgt, dass Ihre Anwendung einen Code erhält, der gegen ein Aktualisierungstoken eingelöst werden kann. Zudem bleibt die Gültigkeit für die Anmeldesitzung Ihrer App erhalten.This ensures that your application receives a code that can be redeemed for a refresh token, thus ensuring your app's login session remains valid over time.

ProtokolldiagrammProtocol diagram

Das folgende Diagramm zeigt, wie der gesamte implizite Anmeldevorgang aussieht, und in den folgenden Abschnitten wird jeder Schritt im Detail beschrieben.The following diagram shows what the entire implicit sign-in flow looks like and the sections that follow describe each step in more detail.

Diagramm: Impliziter Anmeldevorgang

Senden der AnmeldeanforderungSend the sign-in request

Zur anfänglichen Anmeldung des Benutzers bei Ihrer App können Sie eine OpenID Connect-Authentifizierungsanforderung senden und ein id_token vom Microsoft Identity Platform-Endpunkt abrufen.To initially sign the user into your app, you can send an OpenID Connect authentication request and get an id_token from the Microsoft identity platform endpoint.

Wichtig

Um ein ID-Token und/oder ein Zugriffstoken erfolgreich anfordern zu können, muss für die App-Registrierung im Azure-Portal auf der Seite „App-Registrierungen“ der entsprechende Flow zur impliziten Genehmigung aktiviert sein. Zu diesem Zweck wählen Sie im Abschnitt Implizite Genehmigung die Option ID-Token und/oder Zugriffstoken aus.To successfully request an ID token and/or an access token, the app registration in the Azure portal - App registrations page must have the corresponding implicit grant flow enabled, by selecting ID tokens and.or access tokens under the Implicit grant section. Wenn sie nicht aktiviert ist, wird ein Fehler des Typs unsupported_response zurückgegeben: The provided value for the input parameter ‚response_type‘ is not allowed for this client. Expected value is ‚code‘. (Der angegebene Wert für den Eingabeparameter ‚response_type‘ ist für diesen Client nicht zulässig. Erwarteter Wert: ‚code‘.)If it's not enabled, an unsupported_response error will be returned: The provided value for the input parameter 'response_type' is not allowed for this client. Expected value is 'code'

// 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
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&scope=openid
&response_mode=fragment
&state=12345
&nonce=678910

Tipp

Klicken Sie zum Testen der Anmeldung mit dem impliziten Fluss auf https://login.microsoftonline.com/common/oauth2/v2.0/authorize... Nach der Anmeldung sollte der Browser mit einem id_token in der Adressleiste zu https://localhost/myapp/ umgeleitet werden.To test signing in using the implicit flow, click https://login.microsoftonline.com/common/oauth2/v2.0/authorize... After signing in, your browser should be redirected to https://localhost/myapp/ with an id_token in the address bar.

ParameterParameter typeType BESCHREIBUNGDescription
tenant requiredrequired Mit dem {tenant} -Wert im Pfad der Anforderung kann festgelegt werden, welche Benutzer sich bei der Anwendung anmelden können.The {tenant} value in the path of the request can be used to control who can sign into the application. Zulässige Werte sind common, organizations, consumers und Mandantenbezeichner.The allowed values are common, organizations, consumers, and tenant identifiers. Weitere Informationen finden Sie in den Grundlagen zu Protokollen.For more detail, see protocol basics.
client_id requiredrequired Die Anwendungs-ID (Client-ID), die Ihrer App im Azure-Portal auf der Seite „App-Registrierungen“ zugewiesen wurde.The Application (client) ID that the Azure portal - App registrations page assigned to your app.
response_type requiredrequired Muss das id_token für die OpenID Connect-Anmeldung enthalten.Must include id_token for OpenID Connect sign-in. Kann auch den Antworttyp token enthalten.It may also include the response_type token. Mithilfe von token kann Ihre App ein Zugriffstoken direkt vom Autorisierungsendpunkt abrufen, ohne dass eine zweite Anforderung an den Autorisierungsendpunkt erforderlich ist.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. Wenn Sie den Antworttyp token verwenden, muss der scope-Parameter einen Bereich enthalten, der angibt, für welche Ressource das Token ausgestellt wird (z. B. „user.read“ in Microsoft Graph).If you use the token response_type, the scope parameter must contain a scope indicating which resource to issue the token for (for example, user.read on Microsoft Graph). Er kann anstelle von token auch code enthalten, damit ein Autorisierungscode für die Verwendung im Autorisierungscodeflow bereitgestellt wird.It can also contain code in place of token to provide an authorization code, for use in the authorization code flow. Diese Antwort vom Typ „ID-Token plus Code“ wird auch als hybrider Flow bezeichnet.This id_token+code response is sometimes called the hybrid flow.
redirect_uri empfohlenrecommended Der Umleitungs-URI der App, in dem Authentifizierungsantworten gesendet und von der App empfangen werden können.The redirect_uri of your app, where authentication responses can be sent and received by your app. Er muss genau mit einer der Umleitungs-URIs übereinstimmen, die Sie im Portal registriert haben, mit dem Unterschied, dass er URL-codiert sein muss.It must exactly match one of the redirect_uris you registered in the portal, except it must be url encoded.
scope requiredrequired Eine durch Leerzeichen getrennte Liste von Bereichen.A space-separated list of scopes. Für OpenID Connect (id_tokens) muss der Bereich openid enthalten sein, der auf der Zustimmungsbenutzeroberfläche die Berechtigung „Anmeldung in Ihrem Namen“ ergibt.For OpenID Connect (id_tokens), it must include the scope openid, which translates to the "Sign you in" permission in the consent UI. Optional können Sie auch die Bereiche email und profile einschließen, um Zugriff auf zusätzliche Benutzerdaten zu erhalten.Optionally you may also want to include the email and profile scopes for gaining access to additional user data. Sie können in diese Anforderung auch andere Bereiche aufnehmen, um die Zustimmung für verschiedene Ressourcen anzufordern, wenn ein Zugriffstoken angefordert wird.You may also include other scopes in this request for requesting consent to various resources, if an access token is requested.
response_mode optionaloptional Gibt die Methode an, die zum Senden des resultierenden Tokens zurück an Ihre App verwendet werden soll.Specifies the method that should be used to send the resulting token back to your app. Der Standardwert nur für ein Zugriffstoken ist „Abfrage“, aber „Fragment“, wenn die Anforderung ein „id_token“ enthält.Defaults to query for just an access token, but fragment if the request includes an id_token.
state empfohlenrecommended Ein in der Anforderung enthaltener Wert, der auch in der Antwort zurückgegeben wird.A value included in the request that will also be returned in the token response. Es kann sich um eine Zeichenfolge mit jedem beliebigen Inhalt handeln.It can be a string of any content that you wish. Ein zufällig generierter eindeutiger Wert wird normalerweise verwendet, um websiteübergreifende Anforderungsfälschungsangriffe zu verhindern.A randomly generated unique value is typically used for preventing cross-site request forgery attacks. Der Status wird auch verwendet, um Informationen über den Status des Benutzers in der App zu codieren, bevor die Authentifizierungsanforderung aufgetreten ist, z. B. Informationen zu der Seite oder Ansicht, die der Benutzer besucht hat.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.
nonce requiredrequired Ein in der Anforderung enthaltener, von der App generierter Wert, der in das resultierende id_token als Anspruch einbezogen wird.A value included in the request, generated by the app, that will be included in the resulting id_token as a claim. Die App kann diesen Wert dann verifizieren, um Tokenwiederholungsangriffe abzuwehren.The app can then verify this value to mitigate token replay attacks. Der Wert ist in der Regel eine zufällige, eindeutige Zeichenfolge, die zur Identifizierung des Ursprungs der Anforderung verwendet werden kann.The value is typically a randomized, unique string that can be used to identify the origin of the request. Nur erforderlich, wenn ein „id_token“ angefordert wird.Only required when an id_token is requested.
prompt optionaloptional Gibt den Typ der erforderlichen Benutzerinteraktion an.Indicates the type of user interaction that is required. Zu diesem Zeitpunkt sind die einzigen gültigen Werte „login“, „none“, „select_account“ und „consent“.The only valid values at this time are 'login', 'none', 'select_account', and 'consent'. prompt=login zwingt den Benutzer, die Anmeldeinformationen bei dieser Anforderung einzugeben. Einmaliges Anmelden ist dadurch nicht möglich.prompt=login will force the user to enter their credentials on that request, negating single-sign on. prompt=none ist genau das Gegenteil: Dieser Wert stellt sicher, dass dem Benutzer keine interaktive Eingabeaufforderung angezeigt wird.prompt=none is the opposite - it will ensure that the user isn't presented with any interactive prompt whatsoever. Wenn die Anforderung nicht über einmaliges Anmelden im Hintergrund abgeschlossen werden kann, gibt der Microsoft Identity Platform-Endpunkt einen Fehler zurück.If the request can't be completed silently via single-sign on, the Microsoft identity platform endpoint will return an error. prompt=select_account sendet den Benutzer an eine Kontoauswahl, in der alle in der Sitzung gespeicherten Konten angezeigt werden.prompt=select_account sends the user to an account picker where all of the accounts remembered in the session will appear. prompt=consent löst nach der Anmeldung des Benutzers das OAuth-Zustimmungsdialogfeld aus, in dem der Benutzer aufgefordert wird, der App Berechtigungen zu gewähren.prompt=consent will trigger the OAuth consent dialog after the user signs in, asking the user to grant permissions to the app.
login_hint optionaloptional Kann verwendet werden, um das Feld für Benutzername/E-Mail-Adresse der Anmeldeseite für den Benutzer vorab auszufüllen, wenn du seinen Benutzernamen vorab kennst.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. Apps verwenden diesen Parameter häufig für die wiederholte Authentifizierung, nachdem sie den Benutzernamen über den Anspruch preferred_username aus einer vorherigen Anmeldung extrahiert haben.Often apps will use this parameter during reauthentication, having already extracted the username from a previous sign-in using the preferred_username claim.
domain_hint optionaloptional Wenn dieser Parameter vorhanden ist, wird der E-Mail-basierte Ermittlungsvorgang übersprungen, den der Benutzer auf der Anmeldeseite durchläuft, und so die Benutzerfreundlichkeit verbessert.If included, it will skip the email-based discovery process that user goes through on the sign in page, leading to a slightly more streamlined user experience. Dieser Parameter wird häufig für branchenspezifische Apps verwendet, die mit nur einem Mandanten betrieben werden. Hierbei wird in einem bestimmten Mandanten ein Domänenname angegeben, und der Benutzer wird an den Verbundanbieter für diesen Mandanten weitergeleitet.This parameter is commonly used for Line of Business apps that operate in a single tenant, where they will provide a domain name within a given tenant, forwarding the user to the federation provider for that tenant. Beachten Sie, dass sich Gäste hierbei nicht bei der Anwendung anmelden können und die Nutzung von Cloudanmeldeinformationen wie FIDO eingeschränkt wird.Note that this hint prevents guests from signing into this application, and limits the use of cloud credentials like FIDO.

Zu diesem Zeitpunkt wird der Benutzer dazu aufgefordert, seine Anmeldeinformationen einzugeben und die Authentifizierung abzuschließen.At this point, the user will be asked to enter their credentials and complete the authentication. Der Microsoft Identity Platform-Endpunkt stellt auch sicher, dass der Benutzer den Berechtigungen zugestimmt hat, die im scope-Abfrageparameter angegeben sind.The Microsoft identity platform endpoint will also ensure that the user has consented to the permissions indicated in the scope query parameter. Wenn der Benutzer keiner Berechtigung zugestimmt hat, wird er dazu aufgefordert, den erforderlichen Berechtigungen zuzustimmen.If the user has consented to none of those permissions, it will ask the user to consent to the required permissions. Weitere Informationen finden Sie unter Berechtigungen, Zustimmung und mehrinstanzenfähigen Apps.For more info, see permissions, consent, and multi-tenant apps.

Sobald der Benutzer authentifiziert ist und seine Zustimmung erteilt hat, gibt der Microsoft Identity Platform-Endpunkt mithilfe der Methode im festgelegten response_mode-Parameter eine Antwort auf dem angegebenen redirect_uri an Ihre App zurück.Once the user authenticates and grants consent, the Microsoft identity platform endpoint will return a response to your app at the indicated redirect_uri, using the method specified in the response_mode parameter.

Erfolgreiche AntwortSuccessful response

Eine erfolgreiche Antwort mithilfe von response_mode=fragment und response_type=id_token+code sieht wie folgt aus, wobei die Zeilenumbrüche der Lesbarkeit dienen:A successful response using response_mode=fragment and response_type=id_token+code looks like the following (with line breaks for legibility):

GET https://localhost/myapp/#
code=0.AgAAktYV-sfpYESnQynylW_UKZmH-C9y_G1A
&id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...
&state=12345
ParameterParameter BESCHREIBUNGDescription
code Ist enthalten, wenn code in response_type enthalten ist.Included if response_type includes code. Dies ist ein Autorisierungscode, der im Autorisierungscodeflow verwendet werden kann.This is an authorization code suitable for use in the authorization code flow.
access_token Ist enthalten, wenn token in response_type enthalten ist.Included if response_type includes token. Das von der App angeforderte Zugriffstoken.The access token that the app requested. Das Zugriffstoken sollte nicht decodiert oder anderweitig untersucht werden, es sollte als nicht transparente Zeichenfolge behandelt werden.The access token shouldn't be decoded or otherwise inspected, it should be treated as an opaque string.
token_type Ist enthalten, wenn token in response_type enthalten ist.Included if response_type includes token. Ist immer Bearer.Will always be Bearer.
expires_in Ist enthalten, wenn token in response_type enthalten ist.Included if response_type includes token. Gibt für die Zwischenspeicherung den Gültigkeitszeitraum des Tokens in Sekunden an.Indicates the number of seconds the token is valid, for caching purposes.
scope Ist enthalten, wenn token in response_type enthalten ist.Included if response_type includes token. Gibt die Bereiche an, für die das Zugriffstoken gültig ist.Indicates the scope(s) for which the access_token will be valid. Umfasst eventuell nicht alle angeforderten Bereiche, wenn sie nicht auf den Benutzer anwendbar sind (im Fall von reinen Azure AD-Bereichen, die angefordert werden, wenn ein persönliches Konto für die Anmeldung verwendet wird).May not include all of the scopes requested, if they were not applicable to the user (in the case of Azure AD-only scopes being requested when a personal account is used to log in).
id_token Ein signiertes JSON Web Token (JWT).A signed JSON Web Token (JWT). Die App kann die Segmente dieses Tokens decodieren, um Informationen zum angemeldeten Benutzer abzurufen.The app can decode the segments of this token to request information about the user who signed in. Die App kann die Werte zwischenspeichern und sie anzeigen, sollte sich in Bezug auf Autorisierungs- und Sicherheitsgrenzen aber nicht darauf verlassen.The app can cache the values and display them, but it shouldn't rely on them for any authorization or security boundaries. Weitere Informationen zu ID-Token finden Sie unter id_token reference.For more information about id_tokens, see the id_token reference.
Hinweis: Wird nur bei Anforderung des Bereichs openid und bei Auswahl von id_tokens für response_type bereitgestellt.Note: Only provided if openid scope was requested and response_type included id_tokens.
state Wenn ein Statusparameter in der Anforderung enthalten ist, sollte der gleiche Wert in der Antwort angezeigt werden.If a state parameter is included in the request, the same value should appear in the response. Die Anwendung sollte überprüfen, ob die Statuswerte in der Anforderung und in der Antwort identisch sind.The app should verify that the state values in the request and response are identical.

FehlerantwortError response

Fehlerantworten können auch an den redirect_uri gesendet werden, damit die App diese angemessen behandeln kann: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
ParameterParameter BESCHREIBUNGDescription
error Eine Fehlercodezeichenfolge, die verwendet werden kann, um unterschiedliche Arten auftretender Fehler zu klassifizieren und um auf Fehler zu reagieren.An error code string that can be used to classify types of errors that occur, and can be used to react to errors.
error_description Eine spezifische Fehlermeldung, mit der Entwickler die Hauptursache eines Authentifizierungsfehlers identifizieren können.A specific error message that can help a developer identify the root cause of an authentication error.

Automatisches Abrufen von Zugriffstoken im HintergrundGetting access tokens silently in the background

Wichtig

Dieser Teil des impliziten Flows funktioniert für Ihre Anwendung wahrscheinlich nicht. Der Grund ist, dass er aufgrund der standardmäßigen Entfernung von Drittanbietercookies für unterschiedliche Browser genutzt wird.This part of the implicit flow is unlikely to work for your application as it's used across different browsers due to the removal of third party cookies by default. Für Chromium-basierte Browser funktioniert dies zwar noch, wenn diese nicht im Inkognitomodus verwendet werden, aber Entwickler sollten die Nutzung dieses Teils des Flows trotzdem überdenken.While this still currently works in Chromium-based browsers that are not in Incognito, developers should reconsider using this part of the flow. In Browsern, die keine Drittanbietercookies unterstützen, erhalten Sie eine Fehlermeldung mit dem Hinweis, dass keine Benutzer angemeldet sind. Der Grund ist, dass die Sitzungscookies der Anmeldeseite vom Browser entfernt wurden.In browsers that do not support third party cookies, you will recieve an error indicating that no users are signed in, as the login page's session cookies were removed by the browser.

Nachdem Sie den Benutzer bei der Single-Page-App angemeldet haben, können Sie Zugriffstoken zum Aufrufen der von der Microsoft Identity Platform gesicherten Web-APIs automatisch abrufen, z. B. Microsoft Graph.Now that you've signed the user into your single-page app, you can silently get access tokens for calling web APIs secured by Microsoft identity platform, such as the Microsoft Graph. Auch wenn Sie mithilfe des Antworttyps token bereits ein Token erhalten haben, können Sie diese Methode zum Abrufen von Token für zusätzliche Ressourcen verwenden, ohne den Benutzer zur erneuten Anmeldung umzuleiten.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.

Im herkömmlichen OpenID Connect/OAuth-Fluss senden Sie dazu eine Anforderung an den Microsoft Identity Platform-Endpunkt /token.In the normal OpenID Connect/OAuth flow, you would do this by making a request to the Microsoft identity platform /token endpoint. Sie können die Anforderung in einem ausgeblendeten IFrame senden, um neue Token für andere Web-APIs zu erhalten:You can make the request 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%2Fuser.read
&response_mode=fragment
&state=12345
&nonce=678910
&prompt=none
&login_hint=myuser@mycompany.com

Weitere Informationen zu den Abfrageparametern in der URL finden Sie unter Senden der Anmeldeanforderung.For details on the query parameters in the URL, see send the sign in request.

Tipp

Kopieren und fügen Sie die folgende Anforderung in eine Browserregisterkarte ein.Try copy & pasting the below request into a browser tab! (Vergessen Sie dabei nicht, den Wert login_hint durch den richtigen Wert für den Benutzer zu ersetzen.)(Don't forget to replace the login_hint values with the correct value 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%2Fuser.read&response_mode=fragment&state=12345&nonce=678910&prompt=none&login_hint={your-username}

Beachten Sie, dass dies auch in Browsern ohne Unterstützung von Drittanbietercookies funktioniert. Der Grund ist, dass die Eingabe direkt in einer Browserleiste erfolgt (im Gegensatz zum Öffnen in einem IFrame).Note that this will work even in browsers without third party cookie support, since you're entering this directly into a browser bar as opposed to opening it within an iframe.

Dank des Parameters prompt=none ist diese Anforderung entweder erfolgreich oder sie schlägt direkt fehl und kehrt zu Ihrer Anwendung zurück.Thanks to the prompt=none parameter, this request will either succeed or fail immediately and return to your application. Die Antwort wird an Ihre App an den angegebenen Umleitungs-URI (redirect_uri) gesendet. Dabei wird die im Parameter response_mode angegebene Methode verwendet.The response will be sent to your app at the indicated redirect_uri, using the method specified in the response_mode parameter.

Erfolgreiche AntwortSuccessful response

Eine erfolgreiche Antwort mit response_mode=fragment sieht wie folgt aus: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.microsoft.com%2Fdirectory.read
ParameterParameter BESCHREIBUNGDescription
access_token Ist enthalten, wenn token in response_type enthalten ist.Included if response_type includes token. Das von der Anwendung angeforderte Zugriffstoken, in diesem Fall für Microsoft Graph.The access token that the app requested, in this case for the Microsoft Graph. Das Zugriffstoken sollte nicht decodiert oder anderweitig untersucht werden, es sollte als nicht transparente Zeichenfolge behandelt werden.The access token shouldn't be decoded or otherwise inspected, it should be treated as an opaque string.
token_type Ist immer Bearer.Will always be Bearer.
expires_in Gibt für die Zwischenspeicherung den Gültigkeitszeitraum des Tokens in Sekunden an.Indicates the number of seconds the token is valid, for caching purposes.
scope Gibt die Bereiche an, für die das Zugriffstoken gültig ist.Indicates the scope(s) for which the access_token will be valid. Umfasst eventuell nicht alle angeforderten Bereiche, wenn sie nicht auf den Benutzer anwendbar sind (im Fall von reinen Azure AD-Bereichen, die angefordert werden, wenn ein persönliches Konto für die Anmeldung verwendet wird).May not include all of the scopes requested, if they were not applicable to the user (in the case of Azure AD-only scopes being requested when a personal account is used to log in).
id_token Ein signiertes JSON Web Token (JWT).A signed JSON Web Token (JWT). Ist enthalten, wenn id_token in response_type enthalten ist.Included if response_type includes id_token. Die App kann die Segmente dieses Tokens decodieren, um Informationen zum angemeldeten Benutzer abzurufen.The app can decode the segments of this token to request information about the user who signed in. Die App kann die Werte zwischenspeichern und sie anzeigen, sollte sich in Bezug auf Autorisierungs- und Sicherheitsgrenzen aber nicht darauf verlassen.The app can cache the values and display them, but it shouldn't rely on them for any authorization or security boundaries. Weitere Informationen zu ID-Token (id_token) finden Sie in der id_token-Referenz.For more information about id_tokens, see the id_token reference.
Hinweis: Wird nur bei Anforderung des openid-Bereichs bereitgestellt.Note: Only provided if openid scope was requested.
state Wenn ein Statusparameter in der Anforderung enthalten ist, sollte der gleiche Wert in der Antwort angezeigt werden.If a state parameter is included in the request, the same value should appear in the response. Die Anwendung sollte überprüfen, ob die Statuswerte in der Anforderung und in der Antwort identisch sind.The app should verify that the state values in the request and response are identical.

FehlerantwortError response

Fehlerantworten können auch an den redirect_uri gesendet werden, damit die App diese angemessen behandeln kann:Error responses may also be sent to the redirect_uri so the app can handle them appropriately. Im Fall von prompt=none wird folgender Fehler erwartet: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
ParameterParameter BESCHREIBUNGDescription
error Eine Fehlercodezeichenfolge, die verwendet werden kann, um unterschiedliche Arten auftretender Fehler zu klassifizieren und um auf Fehler zu reagieren.An error code string that can be used to classify types of errors that occur, and can be used to react to errors.
error_description Eine spezifische Fehlermeldung, mit der Entwickler die Hauptursache eines Authentifizierungsfehlers identifizieren können.A specific error message that can help a developer identify the root cause of an authentication error.

Wenn Sie diesen Fehler in der IFrame-Anforderung erhalten, muss sich der Benutzer erneut anmelden, um ein neues Token abzurufen.If you receive this error in the iframe request, the user must interactively sign in again to retrieve a new token. Diesen Fall können Sie so behandeln, wie es für Ihre Anwendung am sinnvollsten ist.You can choose to handle this case in whatever way makes sense for your application.

Aktualisieren von TokenRefreshing tokens

Die implizite Genehmigung stellt keine Aktualisierungstoken bereit.The implicit grant does not provide refresh tokens. id_tokens und access_tokens laufen nach kurzer Zeit ab. Ihre App muss daher diese Token in regelmäßigen Abständen aktualisieren.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. Zum Aktualisieren beider Tokentypen können Sie die oben erwähnte verborgene IFrame-Anforderung unter Verwendung des Parameters prompt=none ausführen, um das Verhalten der Microsoft Identity Platform zu steuern.To refresh either type of token, you can perform the same hidden iframe request from above using the prompt=none parameter to control the identity platform's behavior. Wenn Sie ein neues id_token erhalten möchten, verwenden Sie unbedingt id_token in response_type und scope=openid sowie einen nonce-Parameter.If you want to receive a new id_token, be sure to use id_token in the response_type and scope=openid, as well as a nonce parameter.

In Browsern, für die keine Drittanbietercookies unterstützt werden, führt dies zu einer Fehlermeldung mit dem Hinweis, dass kein Benutzer angemeldet ist.In browsers that do not support third party cookies, this will result in an error indicating that no user is signed in.

Senden einer AbmeldungsanforderungSend a sign out request

Die OpenID Connect end_session_endpoint ermöglicht Ihrer App das Senden einer Anforderung an den Microsoft Identity Platform-Endpunkt zum Beenden der Sitzung eines Benutzers und zum Löschen von Cookies, die vom Microsoft Identity Platform-Endpunkt festgelegt wurden.The OpenID Connect end_session_endpoint allows your app to send a request to the Microsoft identity platform endpoint to end a user's session and clear cookies set by the Microsoft identity platform endpoint. Um einen Benutzer vollständig von einer Webanwendung abzumelden, muss Ihre App ihre eigene Sitzung mit dem Benutzer beenden (in der Regel durch Löschen eines Tokencaches oder von Cookies) und dann den Browser zu folgender Adresse umleiten: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/
ParameterParameter typeType BESCHREIBUNGDescription
tenant requiredrequired Mit dem {tenant} -Wert im Pfad der Anforderung kann festgelegt werden, welche Benutzer sich bei der Anwendung anmelden können.The {tenant} value in the path of the request can be used to control who can sign into the application. Zulässige Werte sind common, organizations, consumers und Mandantenbezeichner.The allowed values are common, organizations, consumers, and tenant identifiers. Weitere Informationen finden Sie in den Grundlagen zu Protokollen.For more detail, see protocol basics.
post_logout_redirect_uri empfohlenrecommended Die URL, zu der der Benutzer nach erfolgreicher Abmeldung umgeleitet werden soll.The URL that the user should be returned to after logout completes. Dieser Wert muss einem der Umleitung-URIs entsprechen, die für die Anwendung registriert sind.This value must match one of the redirect URIs registered for the application. Wenn keine Angabe erfolgt, wird dem Benutzer vom Microsoft Identity Platform-Endpunkt eine allgemeine Meldung angezeigt.If not included, the user will be shown a generic message by the Microsoft identity platform endpoint.

Nächste SchritteNext steps