Microsoft Identity Platform und der OAuth 2.0-AutorisierungscodeflowMicrosoft identity platform and OAuth 2.0 authorization code flow

Der OAuth 2.0-Autorisierungcodefluss kann in Apps verwendet werden, die auf einem Gerät installiert sind, um Zugriff auf geschützte Ressourcen wie Web-APIs zu gewähren.The OAuth 2.0 authorization code grant can be used in apps that are installed on a device to gain access to protected resources, such as web APIs. Mithilfe der Microsoft Identity Platform-Implementierung von OAuth 2.0 können Sie sich bei mobilen Apps und Desktop-Apps anmelden und über APIs darauf zugreifen.Using the Microsoft identity platform implementation of OAuth 2.0, you can add sign in and API access to your mobile and desktop apps.

In diesem Artikel wird beschrieben, wie Sie direkt für das Protokoll in Ihrer Anwendung in einer beliebigen Sprache programmieren.This article describes how to program directly against the protocol in your application using any language. 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.

Der OAuth 2.0-Autorisierungscodefluss wird in Abschnitt 4.1 der OAuth 2.0-Spezifikationbeschrieben.The OAuth 2.0 authorization code flow is described in section 4.1 of the OAuth 2.0 specification. Er wird zum Ausführen der Authentifizierung und Autorisierung in den meisten App-Typen einschließlich Single-Page-Webanwendungen, Web-Apps und nativ installierten Apps verwendet.It's used to perform authentication and authorization in the majority of app types, including single page apps, web apps, and natively installed apps. Der Flow ermöglicht Apps das sichere Abrufen von Zugriffstoken, die für den Zugriff auf durch den Microsoft Identity Platform-Endpunkt geschützte Ressourcen verwendet werden können, sowie von Aktualisierungstoken, um zusätzliche Zugriffstoken und ID-Token für den angemeldeten Benutzer abzurufen.The flow enables apps to securely acquire access_tokens that can be used to access resources secured by the Microsoft identity platform endpoint, as well as refresh tokens to get additional access_tokens, and ID tokens for the signed in user.

ProtokolldiagrammProtocol diagram

Allgemein sieht der gesamte Authentifizierungsflow für eine Anwendung in etwa wie folgt aus:At a high level, the entire authentication flow for an application looks a bit like this:

OAuth-Autorisierungscodefluss

Für Single-Page-Webanwendungen erforderliche Einrichtung eines Umleitungs-URIRedirect URI setup required for single-page apps

Der Autorisierungscodeflow für Single-Page-Webanwendungen erfordert einige zusätzliche Einrichtungsschritte.The authorization code flow for single page applications requires some additional setup. Befolgen Sie die Anweisungen zum Erstellen Ihrer Single-Page-Webanwendung, um den Umleitungs-URI ordnungsgemäß als für CORS aktiviert zu kennzeichnen.Follow the instructions for creating your single-page application to correctly mark your redirect URI as enabled for CORS. Um CORS für einen vorhandenen Umleitungs-URI zu aktivieren, öffnen Sie den Manifest-Editor, und legen Sie im Abschnitt replyUrlsWithType das Feld type für den Umleitungs-URI auf spa fest.To update an existing redirect URI to enable CORS, open the manifest editor and set the type field for your redirect URI to spa in the replyUrlsWithType section. Sie können auch auf der Registerkarte „Authentifizierung“ im Abschnitt „Web“ auf den Umleitungs-URI klicken und die URIs auswählen, die Sie für die Verwendung des Autorisierungscodeflows migrieren möchten.You can also click on the redirect URI in the "Web" section of the Authentication tab, and select the URIs you want to migrate to using the authorization code flow.

Der Umleitungstyp spa ist abwärtskompatibel mit dem impliziten Flow.The spa redirect type is backwards compatible with the implicit flow. Apps, die derzeit den impliziten Flow zum Abrufen von Token verwenden, können ohne Probleme auf den Umleitungs-URI-Typ spa umgestellt werden und den impliziten Flow weiterhin verwenden.Apps currently using the implicit flow to get tokens can move to the spa redirect URI type without issues and continue using the implicit flow.

Wenn Sie versuchen, den Autorisierungscodeflow zu verwenden, und der folgende Fehler angezeigt wird:If you attempt to use the authorization code flow and see this error:

access to XMLHttpRequest at 'https://login.microsoftonline.com/common/v2.0/oauth2/token' from origin 'yourApp.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Dann müssen Sie Ihre App-Registrierung aufrufen und den Umleitungs-URI für Ihre App auf den Typ spa aktualisieren.Then you need to visit your app registration and update the redirect URI for your app to type spa.

Anfordern eines AutorisierungscodesRequest an authorization code

Der Autorisierungscodefluss beginnt damit, dass der Client den Benutzer auf den /authorize -Endpunkt leitet.The authorization code flow begins with the client directing the user to the /authorize endpoint. In dieser Anforderung fordert der Client die Berechtigungen openid, offline_access und https://graph.microsoft.com/mail.read vom Benutzer an.In this request, the client requests the openid, offline_access, and https://graph.microsoft.com/mail.read permissions from the user. Einige Berechtigungen sind auf Administratoren beschränkt, z. B. das Schreiben von Daten in das Verzeichnis einer Organisation mithilfe von Directory.ReadWrite.All.Some permissions are admin-restricted, for example writing data to an organization's directory by using Directory.ReadWrite.All. Wenn Ihre Anwendung von einem Organisationsbenutzer Zugriff auf eine dieser Berechtigungen anfordert, wird dem Benutzer in einer Fehlermeldung mitgeteilt, dass er nicht befugt ist, den Berechtigungen Ihrer App zuzustimmen.If your application requests access to one of these permissions from an organizational user, the user receives an error message that says they're not authorized to consent to your app's permissions. Zugriff auf Bereiche, die auf Administratoren beschränkt sind, sollten Sie direkt von einem Unternehmensadministrator anfordern.To request access to admin-restricted scopes, you should request them directly from a company administrator. Weitere Informationen finden Sie unter Auf Administratoren beschränkte Berechtigungen.For more information, read Admin-restricted permissions.

// Line breaks for legibility only

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

Tipp

Klicken Sie auf den Link unten, um diese Anforderung auszuführen.Click the link below to execute this request! Nach der Anmeldung sollte der Browser mit einem code in der Adressleiste zu https://localhost/myapp/ umgeleitet werden.After signing in, your browser should be redirected to https://localhost/myapp/ with a code in the address bar. https://login.microsoftonline.com/common/oauth2/v2.0/authorize...https://login.microsoftonline.com/common/oauth2/v2.0/authorize...

ParameterParameter Erforderlich/optionalRequired/optional 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 experience assigned to your app.
response_type requiredrequired Muss code für den Autorisierungscodefluss enthalten.Must include code for the authorization code flow.
redirect_uri Erforderlichrequired 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. Für native und mobile Apps sollten Sie den Standardwert https://login.microsoftonline.com/common/oauth2/nativeclient verwenden.For native & mobile apps, you should use the default value of https://login.microsoftonline.com/common/oauth2/nativeclient.
scope requiredrequired Eine durch Leerzeichen getrennte Liste mit Bereichen , denen der Benutzer zustimmen soll.A space-separated list of scopes that you want the user to consent to. Für den Abschnitt /authorize der Anforderung kann dies mehrere Ressourcen abdecken, sodass Ihre App Zustimmung für mehrere Web-APIs abrufen kann, die Sie aufrufen möchten.For the /authorize leg of the request, this can cover multiple resources, allowing your app to get consent for multiple web APIs you want to call.
response_mode empfohlenrecommended 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. Dabei kann es sich um eine der folgenden Methoden handeln:Can be one of the following:

- query
- fragment
- form_post

query gibt den Code als ein Abfragezeichenfolgen-Parameter in der Umleitungs-URI an.query provides the code as a query string parameter on your redirect URI. Wenn Sie ein ID-Token mit dem impliziten Flow anfordern, können Sie query nicht gemäß OpenID-Spezifikation verwenden. Wenn Sie lediglich den Code anfordern, können Sie query, fragment oder form_post verwenden.If you're requesting an ID token using the implicit flow, you can't use query as specified in the OpenID spec. If you're requesting just the code, you can use query, fragment, or form_post. form_post führt ein POST-Element mit dem Code zu Ihrer Umleitungs-URI aus.form_post executes a POST containing the code to your redirect URI. Weitere Informationen finden Sie unter OpenID Connect-Protokoll.For more info, see OpenID Connect protocol.
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 Wert kann ebenfalls Informationen über den Status des Benutzers in der App codieren, bevor die Authentifizierungsanforderung aufgetreten ist, z.B. Informationen zu der Seite oder Ansicht, die der Benutzer besucht hat.The value can also encode information about the user's state in the app before the authentication request occurred, such as the page or view they were on.
prompt optionaloptional Gibt den Typ der erforderlichen Benutzerinteraktion an.Indicates the type of user interaction that is required. Die einzigen gültigen Werte sind gegenwärtig login, none und consent.The only valid values at this time are login, none, 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 interaction_required-Fehler zurück.If the request can't be completed silently via single-sign on, the Microsoft identity platform endpoint will return an interaction_required error.
- prompt=consent löst nach der Anmeldung des Benutzers das OAuth-Zustimmungsdialogfeld aus, in dem der Benutzer aufgefordert wird, der App Berechtigungen zu erteilen.- prompt=consent will trigger the OAuth consent dialog after the user signs in, asking the user to grant permissions to the app.
- prompt=select_account unterbricht beim einmaligen Anmelden die Kontoauswahlumgebung, in der entweder alle Konten in der Sitzung, alle gespeicherten Konten oder eine Option zur Verwendung eines ganz anderen Kontos aufgelistet werden.- prompt=select_account will interrupt single sign-on providing account selection experience listing all the accounts either in session or any remembered account or an option to choose to use a different account altogether.
login_hint optionaloptional Dieser Wert kann verwendet werden, um das Feld für den Benutzernamen oder die E-Mail-Adresse auf der Anmeldeseite vorab für den Benutzer auszufüllen, wenn dessen Benutzername im Vorfeld bekannt ist.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 aus einer vorherigen Anmeldung mithilfe des Anspruchs preferred_username extrahiert haben.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_hint optionaloptional Wenn dieser Parameter vorhanden ist, wird der E-Mail-basierte Ermittlungsvorgang übersprungen, den der Benutzer auf der Anmeldeseite durchläuft. Dadurch wird die Benutzerfreundlichkeit verbessert, und der Benutzer wird beispielsweise an seinen Verbundidentitätsanbieter weitergeleitet.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 - for example, sending them to their federated identity provider. Apps verwenden diesen Parameter häufig für die wiederholte Authentifizierung, indem sie tid aus einer vorherigen Anmeldung extrahieren.Often apps will use this parameter during re-authentication, by extracting the tid from a previous sign-in. Verwenden Sie domain_hint=consumers, wenn der Anspruch tid den Wert 9188040d-6c67-4c5b-b112-36a304b66dad hat.If the tid claim value is 9188040d-6c67-4c5b-b112-36a304b66dad, you should use domain_hint=consumers. Verwenden Sie andernfalls domain_hint=organizations.Otherwise, use domain_hint=organizations.
code_challenge Empfohlen/erforderlichrecommended / required Wird verwendet, um die Gewährung von Autorisierungscodes über Proof Key for Code Exchange (PKCE) zu sichern.Used to secure authorization code grants via Proof Key for Code Exchange (PKCE). Erforderlich, wenn code_challenge_method enthalten ist.Required if code_challenge_method is included. Weitere Informationen finden Sie unter PKCE RFC.For more information, see the PKCE RFC. Dies wird jetzt für alle Anwendungstypen (native Apps, SPAs und vertrauliche Clients wie Web-Apps) empfohlen.This is now recommended for all application types - native apps, SPAs, and confidential clients like web apps.
code_challenge_method Empfohlen/erforderlichrecommended / required Die Methode wird zum Codieren von code_verifier für den code_challenge-Parameter verwendet.The method used to encode the code_verifier for the code_challenge parameter. Es kann sich um einen der folgenden Werte handeln:Can be one of the following values:

- plain
- S256

Wenn ausgeschlossen, wird angenommen, dass code_challenge Klartext ist, wenn code_challenge enthalten ist.If excluded, code_challenge is assumed to be plaintext if code_challenge is included. Microsoft Identity Platform unterstützt sowohl plain als auch S256.Microsoft identity platform supports both plain and S256. Weitere Informationen finden Sie unter PKCE RFC.For more information, see the PKCE RFC. Dies ist für Single-Page-Webanwendungen erforderlich, die den Autorisierungscodeflow verwenden.This is required for single page apps using the authorization code flow.

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 not consented to any of those permissions, it will ask the user to consent to the required permissions. Nähere Einzelheiten zu Berechtigungen, Zustimmung und mehrinstanzenfähigen Apps erhalten Sie hier.Details of permissions, consent, and multi-tenant apps are provided here.

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 mit response_mode=query sieht wie folgt aus:A successful response using response_mode=query looks like:

GET https://login.microsoftonline.com/common/oauth2/nativeclient?
code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq...
&state=12345
ParameterParameter BESCHREIBUNGDescription
code Der Autorisierungscode, den die App angefordert hat.The authorization_code that the app requested. Die App kann den Autorisierungscode zum Anfordern eines Zugriffstokens für die Zielressource verwenden.The app can use the authorization code to request an access token for the target resource. Autorisierungscodes sind kurzlebig und laufen in der Regel nach etwa zehn Minuten ab.Authorization_codes are short lived, typically they expire after about 10 minutes.
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.

Sie können auch ein Zugriffstoken und ein ID-Token erhalten, wenn Sie eines anfordern und die implizite Genehmigung in Ihrer Anwendungsregistrierung aktiviert ist.You can also receive an access token and ID token if you request one and have the implicit grant enabled in your application registration. Dies wird manchmal als „hybrider Flow“ bezeichnet und von Frameworks wie ASP.NET verwendet.This is sometimes referred to as the "hybrid flow", and is used by frameworks like ASP.NET.

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://login.microsoftonline.com/common/oauth2/nativeclient?
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.

Fehlercodes beim AutorisierungsendpunktfehlerError codes for authorization endpoint errors

Die folgende Tabelle beschreibt die verschiedenen Fehlercodes, die im error -Parameter der Fehlerantwort zurückgegeben werden können:The following table describes the various error codes that can be returned in the error parameter of the error response.

FehlercodeError Code BESCHREIBUNGDescription ClientaktionClient Action
invalid_request Protokollfehler, z.B. ein fehlender erforderlicher Parameter.Protocol error, such as a missing required parameter. Korrigieren Sie die Anforderung, und senden Sie sie erneut.Fix and resubmit the request. Dies ist ein Entwicklungsfehler, der in der Regel bei den Eingangstest entdeckt wird.This is a development error typically caught during initial testing.
unauthorized_client Die Clientanwendung darf keinen Autorisierungscode anfordern.The client application isn't permitted to request an authorization code. Dieser Fehler tritt in der Regel auf, wenn die Clientanwendung nicht in Azure AD registriert ist oder dem Azure AD-Mandanten des Benutzers nicht hinzugefügt wird.This error usually occurs when the client application isn't registered in Azure AD or isn't added to the user's Azure AD tenant. Die Anwendung kann den Benutzer zum Installieren der Anwendung und zum Hinzufügen zu Azure AD auffordern.The application can prompt the user with instruction for installing the application and adding it to Azure AD.
access_denied Der Ressourcenbesitzer hat die Zustimmung verweigert.Resource owner denied consent Die Clientanwendung kann den Benutzer benachrichtigen, dass sie ohne Zustimmung des Benutzers nicht fortfahren kann.The client application can notify the user that it can't proceed unless the user consents.
unsupported_response_type Der Autorisierungsserver unterstützt den Antworttyp in der Anforderung nicht.The authorization server does not support the response type in the request. Korrigieren Sie die Anforderung, und senden Sie sie erneut.Fix and resubmit the request. Dies ist ein Entwicklungsfehler, der in der Regel bei den Eingangstest entdeckt wird.This is a development error typically caught during initial testing.
server_error Der Server hat einen unerwarteten Fehler erkannt.The server encountered an unexpected error. Wiederholen Sie die Anforderung.Retry the request. Diese Fehler werden durch temporäre Bedingungen verursacht.These errors can result from temporary conditions. Die Clientanwendung kann dem Benutzer erklären, dass ihre Antwort aufgrund eines temporären Fehlers verzögert ist.The client application might explain to the user that its response is delayed to a temporary error.
temporarily_unavailable Der Server ist vorübergehend überlastet und kann die Anforderung nicht verarbeiten.The server is temporarily too busy to handle the request. Wiederholen Sie die Anforderung.Retry the request. Die Clientanwendung kann dem Benutzer erklären, dass ihre Antwort aufgrund einer temporären Bedingung verzögert ist.The client application might explain to the user that its response is delayed because of a temporary condition.
invalid_resource Die Zielressource ist ungültig, da sie nicht vorhanden ist, Azure AD sie nicht findet oder sie nicht ordnungsgemäß konfiguriert ist.The target resource is invalid because it does not exist, Azure AD can't find it, or it's not correctly configured. Dieser Fehler gibt an, dass die Ressource, falls vorhanden, im Mandanten nicht konfiguriert wurde.This error indicates the resource, if it exists, has not been configured in the tenant. Die Anwendung kann den Benutzer zum Installieren der Anwendung und zum Hinzufügen zu Azure AD auffordern.The application can prompt the user with instruction for installing the application and adding it to Azure AD.
login_required Zu viele oder keine Benutzer gefundenToo many or no users found Der Client hat die Authentifizierung im Hintergrund angefordert (prompt=none), ein einzelner Benutzer konnte jedoch nicht gefunden werden.The client requested silent authentication (prompt=none), but a single user could not found. Dies kann bedeuten, dass in der Sitzung mehrere Benutzer oder keine Benutzer aktiv sind.This may mean there are multiple users active in the session, or no users. Dabei wird der ausgewählte Mandant berücksichtigt (wenn z.B. zwei Azure AD-Konten und ein Microsoft-Konto aktiv sind und consumers ausgewählt wird, wird die Authentifizierung im Hintergrund ausgeführt).This takes into account the tenant chosen (for example, if there are two Azure AD accounts active and one Microsoft account, and consumers is chosen, silent authentication will work).
interaction_required Die Anforderung erfordert eine Benutzerinteraktion.The request requires user interaction. Es ist ein zusätzlicher Schritt zur Authentifizierung oder eine Zustimmung erforderlich.An additional authentication step or consent is required. Wiederholen Sie die Anforderung ohne prompt=none.Retry the request without prompt=none.

Anfordern eines ZugriffstokensRequest an access token

Nun, da Sie einen Autorisierungscode erworben und die Berechtigung vom Benutzer erhalten haben, können Sie den code für ein access_token auf die gewünschte Ressource einlösen.Now that you've acquired an authorization_code and have been granted permission by the user, you can redeem the code for an access_token to the desired resource. Senden Sie hierzu eine POST-Anforderung an den /token-Endpunkt:Do this by sending a POST request to the /token endpoint:

// Line breaks for legibility only

POST /{tenant}/oauth2/v2.0/token HTTP/1.1
Host: https://login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&scope=https%3A%2F%2Fgraph.microsoft.com%2Fmail.read
&code=OAAABAAAAiL9Kn2Z27UubvWFPbm0gLWQJVzCTE9UkP3pSx1aXxUjq3n8b2JRLk4OxVXr...
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&grant_type=authorization_code
&client_secret=JqQX2PNo9bpM0uEihUPzyrh    // NOTE: Only required for web apps. This secret needs to be URL-Encoded.

Tipp

Führen Sie diese Anforderung in Postman aus.Try executing this request in Postman! (Vergessen Sie nicht, code zu ersetzen) Diese Anforderung in Postman ausführen(Don't forget to replace the code) Try running this request in Postman

ParameterParameter Erforderlich/optionalRequired/optional 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.
grant_type requiredrequired Muss der authorization_code für den Autorisierungscodefluss sein.Must be authorization_code for the authorization code flow.
scope Optionaloptional Eine durch Leerzeichen getrennte Liste von Bereichen.A space-separated list of scopes. Die Bereiche müssen alle von einer einzelnen Ressource stammen, zusammen mit den OIDC-Bereichen (profile, openid, email).The scopes must all be from a single resource, along with OIDC scopes (profile, openid, email). Eine ausführlichere Erläuterung von Bereichen finden Sie in Berechtigungen, Zustimmung und Bereiche.For a more detailed explanation of scopes, refer to permissions, consent, and scopes. Dies ist eine Microsoft-Erweiterung für den Autorisierungscodeflow, der es Apps ermöglichen soll, während der Tokeneinlösung die Ressource zu deklarieren, für die sie das Token benötigen.This is a Microsoft extension to the authorization code flow, intended to allow apps to declare the resource they want the token for during token redemption.
code requiredrequired Der Autorisierungscode, den Sie im ersten Abschnitt des Vorgangs erhalten haben.The authorization_code that you acquired in the first leg of the flow.
redirect_uri requiredrequired Derselbe Wert für den Umleitungs-URI, der zum Abrufen des Autorisierungscodes verwendet wurdeThe same redirect_uri value that was used to acquire the authorization_code.
client_secret Für vertrauliche Web-Apps erforderlichrequired for confidential web apps Der geheime App-Schlüssel, den Sie im App-Registrierungsportal für Ihre App erstellt haben.The application secret that you created in the app registration portal for your app. Sie sollten den geheimen Anwendungsschlüssel nicht in einer nativen App oder in einer Single-Page-Webanwendung verwenden, weil geheime Clientschlüssel nicht zuverlässig auf Geräten oder Webseiten gespeichert werden können.You shouldn't use the application secret in a native app or single page app because client_secrets can't be reliably stored on devices or web pages. Er ist erforderlich für Web-Apps und Web-APIs, die die Möglichkeit haben, den geheimen Client-Schlüssel sicher auf dem Server zu speichern.It's required for web apps and web APIs, which have the ability to store the client_secret securely on the server side. Der geheime Clientschlüssel muss vor dem Senden URL-codiert werden.The client secret must be URL-encoded before being sent. Weitere Informationen zur URI-Codierung finden Sie in der Spezifikation der generischen URI-Syntax.For more information on uri encoding, see the URI Generic Syntax specification.
code_verifier empfohlenrecommended Derselbe code_verifier-Parameter, der auch zum Abrufen von „authorization_code“ verwendet wurde.The same code_verifier that was used to obtain the authorization_code. Erforderlich, wenn PKCE bei der Anforderung für die Gewährung des Autorisierungscodes verwendet wurde.Required if PKCE was used in the authorization code grant request. Weitere Informationen finden Sie unter PKCE RFC.For more information, see the PKCE RFC.

Erfolgreiche AntwortSuccessful response

Eine erfolgreiche Tokenantwort sieht wie folgt aus:A successful token response will look like:

{
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
    "token_type": "Bearer",
    "expires_in": 3599,
    "scope": "https%3A%2F%2Fgraph.microsoft.com%2Fmail.read",
    "refresh_token": "AwABAAAAvPM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4...",
    "id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctOD...",
}
ParameterParameter BESCHREIBUNGDescription
access_token Das angeforderte Zugriffstoken.The requested access token. Die App kann dieses Token zur Authentifizierung bei geschützten Ressourcen verwenden, wie z.B. eine Web-API.The app can use this token to authenticate to the secured resource, such as a web API.
token_type Gibt den Wert des Tokentyps an.Indicates the token type value. Der Bearertyp ist der einzige Typ, den Azure AD unterstützt.The only type that Azure AD supports is Bearer
expires_in Gibt an, wie lange das Zugriffstoken (in Sekunden) gültig ist.How long the access token is valid (in seconds).
scope Die Bereiche, für die das Zugriffstoken gültig ist.The scopes that the access_token is valid for.
refresh_token Ein Aktualisierungstoken von OAuth 2.0.An OAuth 2.0 refresh token. Die App kann dieses Token verwenden, um zusätzliche Zugriffstoken nach Ablauf der aktuellen Zugriffstoken zu erhalten.The app can use this token acquire additional access tokens after the current access token expires. Aktualisierungstoken sind langlebig und können verwendet werden, um den Zugriff auf Ressourcen für längere Zeit beizubehalten.Refresh_tokens are long-lived, and can be used to retain access to resources for extended periods of time. Weitere Informationen zum Aktualisieren eines Zugriffstokens finden Sie im Abschnitt weiter unten.For more detail on refreshing an access token, refer to the section below.
Hinweis: Wird nur bei Anforderung des offline_access-Bereichs bereitgestellt.Note: Only provided if offline_access scope was requested.
id_token JSON Web Token (JWT).A 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 should not 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 openid-Bereichs bereitgestellt.Note: Only provided if openid scope was requested.

FehlerantwortError response

Fehlerantworten sehen wie folgt aus:Error responses will look like:

{
  "error": "invalid_scope",
  "error_description": "AADSTS70011: The provided value for the input parameter 'scope' is not valid. The scope https://foo.microsoft.com/mail.read is not valid.\r\nTrace ID: 255d1aef-8c98-452f-ac51-23d051240864\r\nCorrelation ID: fb3d2015-bc17-4bb9-bb85-30c5cf1aaaa7\r\nTimestamp: 2016-01-09 02:02:12Z",
  "error_codes": [
    70011
  ],
  "timestamp": "2016-01-09 02:02:12Z",
  "trace_id": "255d1aef-8c98-452f-ac51-23d051240864",
  "correlation_id": "fb3d2015-bc17-4bb9-bb85-30c5cf1aaaa7"
}
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.
error_codes Eine Liste der STS-spezifischen Fehlercodes, die bei der Diagnose helfen können.A list of STS-specific error codes that can help in diagnostics.
timestamp Der Zeitpunkt, zu dem der Fehler aufgetreten istThe time at which the error occurred.
trace_id Ein eindeutiger Bezeichner für die Anforderung, die bei der Diagnose helfen kannA unique identifier for the request that can help in diagnostics.
correlation_id Ein eindeutiger Bezeichner für die Anforderung, die bei der komponentenübergreifenden Diagnose helfen kannA unique identifier for the request that can help in diagnostics across components.

Fehlercodes für Token-EndpunktfehlerError codes for token endpoint errors

FehlercodeError Code BESCHREIBUNGDescription ClientaktionClient Action
invalid_request Protokollfehler, z.B. ein fehlender erforderlicher Parameter.Protocol error, such as a missing required parameter. Korrigieren Sie die Anforderung oder die App-Registrierung, und senden Sie die Anforderung erneut.Fix the request or app registration and resubmit the request
invalid_grant Der Autorisierungscode oder PKCE-Codeprüfer ist ungültig oder abgelaufen.The authorization code or PKCE code verifier is invalid or has expired. Versuchen Sie, eine neue Anforderung für den /authorize-Endpunkt zu senden, und stellen Sie sicher, dass der „code_verifier“-Parameter korrekt war.Try a new request to the /authorize endpoint and verify that the code_verifier parameter was correct.
unauthorized_client Der authentifizierte Client ist zur Verwendung dieses Autorisierungsgewährungstyps nicht autorisiert.The authenticated client isn't authorized to use this authorization grant type. Dies tritt in der Regel auf, wenn die Clientanwendung nicht in Azure AD registriert ist oder dem Azure AD-Mandanten des Benutzers nicht hinzugefügt wird.This usually occurs when the client application isn't registered in Azure AD or isn't added to the user's Azure AD tenant. Die Anwendung kann den Benutzer zum Installieren der Anwendung und zum Hinzufügen zu Azure AD auffordern.The application can prompt the user with instruction for installing the application and adding it to Azure AD.
invalid_client Clientauthentifizierung fehlgeschlagen.Client authentication failed. Die Client-Anmeldeinformationen sind nicht gültig.The client credentials aren't valid. Um das Problem zu beheben, aktualisiert der Anwendungsadministrator die Anmeldeinformationen.To fix, the application administrator updates the credentials.
unsupported_grant_type Der Autorisierungsserver unterstützt den Autorisierungsgewährungstyp nicht.The authorization server does not support the authorization grant type. Ändern Sie den Gewährungstyp in der Anforderung.Change the grant type in the request. Diese Art von Fehler sollte nur während der Entwicklung auftreten und bei den ersten Tests erkannt werden.This type of error should occur only during development and be detected during initial testing.
invalid_resource Die Zielressource ist ungültig, da sie nicht vorhanden ist, Azure AD sie nicht findet oder sie nicht ordnungsgemäß konfiguriert ist.The target resource is invalid because it does not exist, Azure AD can't find it, or it's not correctly configured. Dies gibt an, dass die Ressource, falls vorhanden, im Mandanten nicht konfiguriert wurde.This indicates the resource, if it exists, has not been configured in the tenant. Die Anwendung kann den Benutzer zum Installieren der Anwendung und zum Hinzufügen zu Azure AD auffordern.The application can prompt the user with instruction for installing the application and adding it to Azure AD.
interaction_required Die Anforderung erfordert eine Benutzerinteraktion.The request requires user interaction. Beispielsweise ist ein zusätzlicher Schritt zur Authentifizierung erforderlich.For example, an additional authentication step is required. Wiederholen Sie die Anforderung mit der gleichen Ressource.Retry the request with the same resource.
temporarily_unavailable Der Server ist vorübergehend überlastet und kann die Anforderung nicht verarbeiten.The server is temporarily too busy to handle the request. Wiederholen Sie die Anforderung.Retry the request. Die Clientanwendung kann dem Benutzer erklären, dass ihre Antwort aufgrund einer temporären Bedingung verzögert ist.The client application might explain to the user that its response is delayed because of a temporary condition.

Hinweis

Single-Page-Webanwendungen erhalten möglicherweise eine Fehlermeldung des Typs invalid_request, die besagt, dass eine ursprungsübergreifende Tokeneinlösung nur für den Clienttyp „Single-Page-Webanwendung“ zulässig ist.Single page apps may receive an invalid_request error indicating that cross-origin token redemption is permitted only for the 'Single-Page Application' client-type. Dies weist darauf hin, dass der zum Anfordern des Tokens verwendete Umleitungs-URI nicht als spa-Umleitungs-URI gekennzeichnet wurde.This indicates that the redirect URI used to request the token has not been marked as a spa redirect URI. Informationen zum Aktivieren dieses Flows finden Sie im Abschnitt Für Single-Page-Webanwendungen erforderliche Einrichtung.Review the application registration steps on how to enable this flow.

Verwenden des ZugriffstokensUse the access token

Nachdem Sie erfolgreich ein access_token abgerufen haben, können Sie das Token für Anforderungen an Web-APIs verwenden, indem Sie es in den Authorization-Header einschließen:Now that you've successfully acquired an access_token, you can use the token in requests to web APIs by including it in the Authorization header:

Tipp

Führen Sie diese Anforderung in Postman aus.Execute this request in Postman! (Ersetzen Sie zunächst den Authorization-Header) Diese Anforderung in Postman ausführen(Replace the Authorization header first) Try running this request in Postman

GET /v1.0/me/messages
Host: https://graph.microsoft.com
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...

Aktualisieren des ZugriffstokensRefresh the access token

Zugriffstoken sind kurzlebig. Daher müssen Sie sie nach Ablauf aktualisieren, um weiterhin auf Ressourcen zuzugreifen.Access_tokens are short lived, and you must refresh them after they expire to continue accessing resources. Dazu übermitteln Sie eine weitere POST-Anforderung an den /token-Endpunkt, dieses Mal unter Angabe des refresh_token statt des code.You can do so by submitting another POST request to the /token endpoint, this time providing the refresh_token instead of the code. Aktualisierungstoken sind für alle Berechtigungen gültig, für die Ihr Client bereits die Einwilligung erhalten hat. Daher kann ein Aktualisierungstoken, das für eine Anforderung für scope=mail.read ausgestellt wurde, zum Anfordern eines neuen Zugriffstokens für scope=api://contoso.com/api/UseResource verwendet werden.Refresh tokens are valid for all permissions that your client has already received consent for - thus, a refresh token issued on a request for scope=mail.read can be used to request a new access token for scope=api://contoso.com/api/UseResource.

Für Aktualisierungstoken für Web-Apps und native Apps ist keine bestimmte Lebensdauer festgelegt.Refresh tokens for web apps and native apps do not have specified lifetimes. Normalerweise verfügen Aktualisierungstoken über relativ lange Lebensdauern.Typically, the lifetimes of refresh tokens are relatively long. In einigen Fällen laufen Aktualisierungstoken aber ab, werden widerrufen oder verfügen nicht über ausreichende Berechtigungen für die gewünschte Aktion.However, in some cases, refresh tokens expire, are revoked, or lack sufficient privileges for the desired action. Von Ihrer Anwendung müssen Fehler, die vom Tokenausstellungsendpunkt zurückgegeben werden, erwartet und richtig behandelt werden.Your application needs to expect and handle errors returned by the token issuance endpoint correctly. Single-Page-Webanwendungen erhalten jedoch ein Token mit einer Lebensdauer von 24 Stunden, wobei täglich eine neue Authentifizierung erforderlich ist.Single page apps, however, get a token with a 24 hour lifetime, requiring a new authentication every day. Diese Authentifizierung kann im Hintergrund in einem IFrame erfolgen, wenn Cookies von Drittanbietern aktiviert sind. In Browsern ohne Cookies von Drittanbietern (z. B. in Safari) muss sie jedoch in einem Frame der obersten Ebene (entweder vollständige Seitennavigation oder Popup) ausgeführt werden.This can be done silently in an iframe when 3rd party cookies are enabled, but must be done in a top level frame (either full page navigation or a popup) in browsers without 3rd party cookies such as Safari.

Obwohl Aktualisierungstoken nicht widerrufen werden, wenn sie zum Abrufen neuer Zugriffstoken verwendet werden, sollten Sie das alte Aktualisierungstoken verwerfen.Although refresh tokens aren't revoked when used to acquire new access tokens, you are expected to discard the old refresh token. Die OAuth 2.0-Spezifikation besagt Folgendes: „Der Autorisierungsserver KANN ein neues Aktualisierungstoken ausstellen. In dem Fall MUSS der Client das alte Aktualisierungstoken verwerfen und durch das neue Aktualisierungstoken ersetzen.The OAuth 2.0 spec says: "The authorization server MAY issue a new refresh token, in which case the client MUST discard the old refresh token and replace it with the new refresh token. Der Autorisierungsserver KANN das alte Aktualisierungstoken nach dem Ausstellen eines neuen Aktualisierungstokens für den Client widerrufen.“The authorization server MAY revoke the old refresh token after issuing a new refresh token to the client."

Wichtig

Aktualisierungstoken, die an einen als spa registrierten Umleitungs-URI gesendet werden, laufen nach 24 Stunden ab.For refresh tokens sent to a redirect URI registered as spa, the refresh token will expire after 24 hours. Weitere Aktualisierungstoken, die mithilfe des ersten Aktualisierungstokens abgerufen werden, übernehmen diese Ablaufzeit, sodass Apps darauf vorbereitet werden müssen, den Autorisierungscodeflow mithilfe einer interaktiven Authentifizierung erneut auszuführen, um alle 24 Stunden ein neues Aktualisierungstoken abzurufen.Additional refresh tokens acquired using the initial refresh token will carry over that expiration time, so apps must be prepared to re-run the authorization code flow using an interactive authentication to get a new refresh token every 24 hours. Benutzer müssen ihre Anmeldeinformationen nicht eingeben, und normalerweise wird nicht einmal eine Benutzeroberfläche, sondern nur ein erneutes Laden Ihrer Anwendung angezeigt. Der Browser muss jedoch die Anmeldeseite in einem Frame der obersten Ebene aufrufen, damit die Anmeldesitzung angezeigt wird.Users do not have to enter their credentials, and will usually not even see any UX, just a reload of your application - but the browser must visit the login page in a top level frame in order to see the login session. Dies liegt an den Datenschutzfunktionen in Browsern, die Cookies von Drittanbietern blockieren.This is due to privacy features in browsers that block 3rd party cookies.


// Line breaks for legibility only

POST /{tenant}/oauth2/v2.0/token HTTP/1.1
Host: https://login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&scope=https%3A%2F%2Fgraph.microsoft.com%2Fmail.read
&refresh_token=OAAABAAAAiL9Kn2Z27UubvWFPbm0gLWQJVzCTE9UkP3pSx1aXxUjq...
&grant_type=refresh_token
&client_secret=JqQX2PNo9bpM0uEihUPzyrh      // NOTE: Only required for web apps. This secret needs to be URL-Encoded

Tipp

Führen Sie diese Anforderung in Postman aus.Try executing this request in Postman! (Vergessen Sie nicht, refresh_token zu ersetzen) Diese Anforderung in Postman ausführen(Don't forget to replace the refresh_token) Try running this request in Postman

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 experience assigned to your app.
grant_type requiredrequired Muss der refresh_token für diesen Abschnitt des Autorisierungscodeflusses sein.Must be refresh_token for this leg of the authorization code flow.
scope requiredrequired Eine durch Leerzeichen getrennte Liste von Bereichen.A space-separated list of scopes. Die in diesem Abschnitt angeforderten Bereiche müssen den Bereichen entsprechen oder eine Teilmenge der Bereiche sein, die im ursprünglichen Autorisierungscode-Abschnitt angefordert wurden.The scopes requested in this leg must be equivalent to or a subset of the scopes requested in the original authorization_code request leg. Wenn die in dieser Anforderung angegebenen Bereiche mehrere Ressourcenserver umfassen, gibt der Microsoft Identity Platform-Endpunkt ein Token für die im ersten Bereich angegebene Ressource zurück.If the scopes specified in this request span multiple resource server, then the Microsoft identity platform endpoint will return a token for the resource specified in the first scope. Eine ausführlichere Erläuterung von Bereichen finden Sie in Berechtigungen, Zustimmung und Bereiche.For a more detailed explanation of scopes, refer to permissions, consent, and scopes.
refresh_token Erforderlichrequired Das Aktualisierungstoken, das Sie im zweiten Abschnitt des Vorgangs erhalten haben.The refresh_token that you acquired in the second leg of the flow.
client_secret erforderlich für Web-Appsrequired for web apps Der geheime App-Schlüssel, den Sie im App-Registrierungsportal für Ihre App erstellt haben.The application secret that you created in the app registration portal for your app. Er sollte nicht in einer systemeigenen App verwendet werden, da geheime Client-Schlüssel nicht zuverlässig auf Geräten gespeichert werden können.It should not be used in a native app, because client_secrets can't be reliably stored on devices. Er ist erforderlich für Web-Apps und Web-APIs, die die Möglichkeit haben, den geheimen Client-Schlüssel sicher auf dem Server zu speichern.It's required for web apps and web APIs, which have the ability to store the client_secret securely on the server side. Dieser geheime Schlüssel muss URL-codiert sein.This secret needs to be URL-Encoded. Weitere Informationen finden Sie in der Spezifikation der generischen URI-Syntax.For more information, see the URI Generic Syntax specification.

Erfolgreiche AntwortSuccessful response

Eine erfolgreiche Tokenantwort sieht wie folgt aus:A successful token response will look like:

{
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
    "token_type": "Bearer",
    "expires_in": 3599,
    "scope": "https%3A%2F%2Fgraph.microsoft.com%2Fmail.read",
    "refresh_token": "AwABAAAAvPM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4...",
    "id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctOD...",
}
ParameterParameter BESCHREIBUNGDescription
access_token Das angeforderte Zugriffstoken.The requested access token. Die App kann dieses Token zur Authentifizierung bei geschützten Ressourcen verwenden, wie z.B. eine Web-API.The app can use this token to authenticate to the secured resource, such as a web API.
token_type Gibt den Wert des Tokentyps an.Indicates the token type value. Der Bearertyp ist der einzige Typ, den Azure AD unterstützt.The only type that Azure AD supports is Bearer
expires_in Gibt an, wie lange das Zugriffstoken (in Sekunden) gültig ist.How long the access token is valid (in seconds).
scope Die Bereiche, für die das Zugriffstoken gültig ist.The scopes that the access_token is valid for.
refresh_token Ein neues Aktualisierungstoken von OAuth 2.0.A new OAuth 2.0 refresh token. Ersetzen Sie das alte Aktualisierungstoken durch das neu erworbene, um sicherzustellen, dass Ihre Aktualisierungstoken so lange wie möglich gültig bleiben.You should replace the old refresh token with this newly acquired refresh token to ensure your refresh tokens remain valid for as long as possible.
Hinweis: Wird nur bei Anforderung des offline_access-Bereichs bereitgestellt.Note: Only provided if offline_access scope was requested.
id_token Ein unsigniertes JSON-Webtoken (JWT).An unsigned 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 should not 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 openid-Bereichs bereitgestellt.Note: Only provided if openid scope was requested.

FehlerantwortError response

{
  "error": "invalid_scope",
  "error_description": "AADSTS70011: The provided value for the input parameter 'scope' is not valid. The scope https://foo.microsoft.com/mail.read is not valid.\r\nTrace ID: 255d1aef-8c98-452f-ac51-23d051240864\r\nCorrelation ID: fb3d2015-bc17-4bb9-bb85-30c5cf1aaaa7\r\nTimestamp: 2016-01-09 02:02:12Z",
  "error_codes": [
    70011
  ],
  "timestamp": "2016-01-09 02:02:12Z",
  "trace_id": "255d1aef-8c98-452f-ac51-23d051240864",
  "correlation_id": "fb3d2015-bc17-4bb9-bb85-30c5cf1aaaa7"
}
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.
error_codes Eine Liste der STS-spezifischen Fehlercodes, die bei der Diagnose helfen können.A list of STS-specific error codes that can help in diagnostics.
timestamp Der Zeitpunkt, zu dem der Fehler aufgetreten istThe time at which the error occurred.
trace_id Ein eindeutiger Bezeichner für die Anforderung, die bei der Diagnose helfen kannA unique identifier for the request that can help in diagnostics.
correlation_id Ein eindeutiger Bezeichner für die Anforderung, die bei der komponentenübergreifenden Diagnose helfen kannA unique identifier for the request that can help in diagnostics across components.

Eine Beschreibung der Fehlercodes und der jeweils empfohlenen Clientaktion finden Sie unter Fehlercodes für Token-Endpunktfehler.For a description of the error codes and the recommended client action, see Error codes for token endpoint errors.