Autorisieren des Zugriffs auf Azure Active Directory-Webanwendungen mit dem Flow zum Erteilen des OAuth 2.0-CodesAuthorize access to Azure Active Directory web applications using the OAuth 2.0 code grant flow

Azure Active Directory (Azure AD) verwendet OAuth 2.0, um den Zugriff auf Webanwendungen und Web-APIs in Ihrem Azure AD-Mandanten zu autorisieren.Azure Active Directory (Azure AD) uses OAuth 2.0 to enable you to authorize access to web applications and web APIs in your Azure AD tenant. Diese sprachunabhängige Anleitung beschreibt das Senden und Empfangen von HTTP-Nachrichten ohne Verwendung unserer Open Source-Bibliotheken.This guide is language independent, and describes how to send and receive HTTP messages without using any of our open-source libraries.

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 zur Authentifizierung und Autorisierung bei den meisten Anwendungstypen verwendet, einschließlich Web-Apps und nativ installierten Apps.It is used to perform authentication and authorization in most application types, including web apps and natively installed apps.

Registrieren der Anwendung beim AD-MandantenRegister your application with your AD tenant

Zuerst müssen Sie Ihre Anwendung beim Azure Active Directory-Mandanten (Azure AD) registrieren.First, you need to register your application with your Azure Active Directory (Azure AD) tenant. Hierbei erhalten Sie eine Anwendungs-ID für die Anwendung, und die Aktivierung für den Empfang von Token wird durchgeführt.This will give you an Application ID for your application, as well as enable it to receive tokens.

  • Melden Sie sich beim Azure-Portal an.Sign in to the Azure portal.
  • Wählen Sie Ihren Azure AD-Mandanten aus, indem Sie auf der Seite oben rechts auf Ihr Konto klicken. Klicken Sie anschließend auf das Navigationselement Verzeichnis wechseln, und wählen Sie dann den entsprechenden Mandanten aus.Choose your Azure AD tenant by clicking on your account in the top right corner of the page, followed by clicking on the Switch Directory navigation and then select the appropriate tenant.
    • Überspringen Sie diesen Schritt, wenn Ihr Konto nur einen Azure AD-Mandanten enthält oder wenn Sie bereits den entsprechenden Azure AD-Mandanten ausgewählt haben.Skip this step, if you've only one Azure AD tenant under your account or if you've already selected the appropriate Azure AD tenant.
  • Klicken Sie im linken Navigationsbereich auf Azure Active Directory.In the left hand navigation pane, click on Azure Active Directory.
  • Klicken Sie auf App-Registrierungen und dann auf Neue Registrierung.Click on App Registrations and click on New registration.
  • Folgen Sie der Anleitung, und erstellen Sie eine neue Anwendung.Follow the prompts and create a new application. Es spielt bei diesem Tutorial keine Rolle, ob es sich um eine Webanwendung oder eine öffentliche Clientanwendung (Mobilgerät und Desktop) handelt. Falls Sie jedoch spezielle Beispiele für Webanwendungen bzw. öffentliche Clientanwendungen wünschen, können Sie sich unsere Schnellstarts ansehen.It doesn't matter if it is a web application or a public client (mobile & desktop) application for this tutorial, but if you'd like specific examples for web applications or public client applications, check out our quickstarts.
    • Name ist der Anwendungsname und beschreibt Ihre Anwendung für Endbenutzer.Name is the application name and describes your application to end users.
    • Wählen Sie unter Unterstützte Kontotypen Konten in allen Organisationsverzeichnissen und persönliche Microsoft-Konten aus.Under Supported account types, select Accounts in any organizational directory and personal Microsoft accounts.
    • Stellen Sie den Umleitungs-URI bereit.Provide the Redirect URI. Bei Webanwendungen ist dies die Basis-URL Ihrer App, unter der sich Benutzer anmelden können.For Web Applications, this is the base URL of your app where users can sign in. Beispiel: http://localhost:12345.For example, http://localhost:12345. Bei öffentlichen Clients (Mobilgerät und Desktop) verwendet Azure AD den URI zum Zurückgeben von Tokenantworten.For public client (mobile & desktop), Azure AD uses it to return token responses. Geben Sie einen für Ihre Anwendung spezifischen Wert ein.Enter a value specific to your application. Beispiel: http://MyFirstAADApp.For example, http://MyFirstAADApp.
  • Nach Abschluss der Registrierung weist Azure AD Ihrer Anwendung eine eindeutige Client-ID (die Anwendungs-ID) zu.Once you've completed registration, Azure AD will assign your application a unique client identifier (the Application ID). Diesen Wert benötigen Sie in den nächsten Abschnitten. Daher sollten Sie ihn von der Anwendungsseite kopieren.You need this value in the next sections, so copy it from the application page.
  • Um die Anwendung im Azure-Portal zu suchen, klicken Sie auf App Registrierungen und dann auf Alle Anwendungen anzeigen.To find your application in the Azure portal, click App registrations, and then click View all applications.

OAuth 2.0-AutorisierungsflussOAuth 2.0 authorization flow

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

OAuth-Autorisierungscodefluss

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 gibt der Client die Berechtigungen an, die er vom Benutzer abrufen muss.In this request, the client indicates the permissions it needs to acquire from the user. Sie können den OAuth 2.0-Autorisierungsendpunkt für Ihren Mandanten abrufen, indem Sie im Azure-Portal App-Registrierungen > Endpunkte auswählen.You can get the OAuth 2.0 authorization endpoint for your tenant by selecting App registrations > Endpoints in the Azure portal.

// Line breaks for legibility only

https://login.microsoftonline.com/{tenant}/oauth2/authorize?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&response_type=code
&redirect_uri=http%3A%2F%2Flocalhost%3A12345
&response_mode=query
&resource=https%3A%2F%2Fservice.contoso.com%2F
&state=12345
ParameterParameter BESCHREIBUNGDescription
tenanttenant 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. Die zulässigen Werte sind Mandantenbezeichner (also etwa 8eaef023-2b34-4da1-9baa-8bc8c9d6a490, contoso.onmicrosoft.com oder für mandantenunabhängige Token common).The allowed values are tenant identifiers, for example, 8eaef023-2b34-4da1-9baa-8bc8c9d6a490 or contoso.onmicrosoft.com or common for tenant-independent tokens
client_idclient_id requiredrequired Die Anwendungs-ID, die Ihrer App zugewiesen wird, wenn Sie sie bei Azure AD registrieren.The Application ID assigned to your app when you registered it with Azure AD. Diese finden Sie im Azure-Portal.You can find this in the Azure Portal. Klicken Sie auf der Randleiste mit den Diensten auf Azure Active Directory und auf App-Registrierungen. Wählen Sie dann die Anwendung.Click Azure Active Directory in the services sidebar, click App registrations, and choose the application.
response_typeresponse_type requiredrequired Muss code für den Autorisierungscodefluss enthalten.Must include code for the authorization code flow.
redirect_uriredirect_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. Für native und mobile Apps sollten Sie den Standardwert urn:ietf:wg:oauth:2.0:oob verwenden.For native & mobile apps, you should use the default value of urn:ietf:wg:oauth:2.0:oob.
response_moderesponse_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. Kann query, fragment oder form_post sein.Can be query, fragment, or 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 cannot 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. Der Standardwert ist query für einen Codefluss.The default is query for a code flow.
statestate empfohlenrecommended Ein in der Anforderung enthaltener Wert, der ebenfalls in der Tokenantwort zurückgegeben wird.A value included in the request that is also returned in the token response. 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.
resourceresource empfohlenrecommended Der App-ID-URI der Ziel-Web-API (geschützte Ressource).The App ID URI of the target web API (secured resource). Klicken Sie zum Ermitteln des App-ID-URI im Azure-Portal auf Azure Active Directory und auf App-Registrierungen. Öffnen Sie anschließend die Seite Einstellungen, und klicken Sie auf Eigenschaften.To find the App ID URI, in the Azure Portal, click Azure Active Directory, click Application registrations, open the application's Settings page, then click Properties. Es kann sich auch um eine externe Ressource wie https://graph.microsoft.com handeln.It may also be an external resource like https://graph.microsoft.com. Dieser Parameter muss in einer der Autorisierungs- oder Tokenanforderungen vorhanden sein,This is required in one of either the authorization or token requests. um sicherzustellen, dass weniger Authentifizierungsanforderungen diesen in die Autorisierungsanforderung platzieren und so die Zustimmung des Benutzers empfangen wird.To ensure fewer authentication prompts place it in the authorization request to ensure consent is received from the user.
scopescope ignoriertignored Bei Azure AD v1-Apps müssen Bereiche im Azure-Portal unter Einstellungen der Anwendungen sowie Erforderliche Berechtigungen statisch konfiguriert werden.For v1 Azure AD apps, scopes must be statically configured in the Azure Portal under the applications Settings, Required Permissions.
promptprompt optionaloptional Geben Sie den Typ der erforderlichen Benutzerinteraktion an.Indicate the type of user interaction that is required.

Gültige Werte sind:Valid values are:

login: Der Benutzer sollte zum erneuten Authentifizieren aufgefordert werden.login: The user should be prompted to reauthenticate.

select_account: Der Benutzer wird aufgefordert, ein Konto auszuwählen. Dabei wird das einmalige Anmelden unterbrochen.select_account: The user is prompted to select an account, interrupting single sign on. Der Benutzer kann ein bereits vorhandenes und angemeldetes Konto auswählen, seine Anmeldeinformationen für ein gespeichertes Konto eingeben oder ein ganz anderes Konto verwenden.The user may select an existing signed-in account, enter their credentials for a remembered account, or choose to use a different account altogether.

consent: Die Benutzerzustimmung wurde erteilt, muss aber aktualisiert werden.consent: User consent has been granted, but needs to be updated. Der Benutzer sollte zur Erteilung der Zustimmung aufgefordert werden.The user should be prompted to consent.

admin_consent: Ein Administrator sollte aufgefordert werden, die Zustimmung im Namen aller Benutzer der Organisation zu erteilen.admin_consent: An administrator should be prompted to consent on behalf of all users in their organization

login_hintlogin_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 erneute Authentifizierung, nachdem sie den Benutzernamen aus einer vorherigen Anmeldung mithilfe des Anspruchs preferred_username extrahiert haben.Often apps use this parameter during reauthentication, having already extracted the username from a previous sign-in using the preferred_username claim.
domain_hintdomain_hint optionaloptional Stellt einen Hinweis zum Mandanten oder zur Domäne bereit, die der Benutzer zum Anmelden verwenden sollte.Provides a hint about the tenant or domain that the user should use to sign in. Der Wert von „domain_hint“ ist eine registrierte Domäne für den Mandanten.The value of the domain_hint is a registered domain for the tenant. Wenn der Mandant mit einem lokalen Verzeichnis verbunden ist, führt AAD eine Umleitung an den angegebenen Mandantenverbundserver durch.If the tenant is federated to an on-premises directory, AAD redirects to the specified tenant federation server.
code_challenge_methodcode_challenge_method empfohlenrecommended 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. Kann plain oder S256 sein.Can be one of plain or 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. Azure AAD 1.0 unterstützt sowohl plain als auch S256.Azure AAD v1.0 supports both plain and S256. Weitere Informationen finden Sie unter PKCE RFC.For more information, see the PKCE RFC.
code_challengecode_challenge empfohlenrecommended Wird verwendet, um die Gewährung von Autorisierungscodes über Proof Key for Code Exchange (PKCE) von einem nativen oder öffentlichen Client aus zu sichern.Used to secure authorization code grants via Proof Key for Code Exchange (PKCE) from a native or public client. 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.

Hinweis

Wenn der Benutzer Teil einer Organisation ist, kann ein Administrator der Organisation im Auftrag des Benutzers zustimmen oder ablehnen oder dem Benutzer die Zustimmung erlauben.If the user is part of an organization, an administrator of the organization can consent or decline on the user's behalf, or permit the user to consent. Der Benutzer erhält die Option zur Zustimmung nur dann, wenn der Administrator dies zulässt.The user is given the option to consent only when the administrator permits it.

Nun wird der Benutzer zur Eingabe der Anmeldeinformationen und zur Zustimmung zu den Berechtigungen im Azure-Portal aufgefordert, die von der App angefordert werden.At this point, the user is asked to enter their credentials and consent to the permissions requested by the app in the Azure Portal. Nach der Authentifizierung und der Zustimmung durch den Benutzer versendet Azure AD eine Antwort an Ihre App unter der redirect_uri-Adresse in Ihrer Anforderung mit dem Code.Once the user authenticates and grants consent, Azure AD sends a response to your app at the redirect_uri address in your request with the code.

Erfolgreiche AntwortSuccessful response

Eine erfolgreiche Antwort sieht wie folgt aus:A successful response could look like this:

GET  HTTP/1.1 302 Found
Location: http://localhost:12345/?code= AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrqqf_ZT_p5uEAEJJ_nZ3UmphWygRNy2C3jJ239gV_DBnZ2syeg95Ki-374WHUP-i3yIhv5i-7KU2CEoPXwURQp6IVYMw-DjAOzn7C3JCu5wpngXmbZKtJdWmiBzHpcO2aICJPu1KvJrDLDP20chJBXzVYJtkfjviLNNW7l7Y3ydcHDsBRKZc3GuMQanmcghXPyoDg41g8XbwPudVh7uCmUponBQpIhbuffFP_tbV8SNzsPoFz9CLpBCZagJVXeqWoYMPe2dSsPiLO9Alf_YIe5zpi-zY4C3aLw5g9at35eZTfNd0gBRpR5ojkMIcZZ6IgAA&session_state=7B29111D-C220-4263-99AB-6F6E135D75EF&state=D79E5777-702E-4260-9A62-37F75FF22CCE
ParameterParameter BESCHREIBUNGDescription
admin_consentadmin_consent Der Wert ist „true“, wenn ein Administrator einer Aufforderung zu einer Zustimmungsanforderung zugestimmt hat.The value is True if an administrator consented to a consent request prompt.
codecode Der Autorisierungscode, den die App angefordert hat.The authorization code that the application requested. Die Anwendung kann den Autorisierungscode zum Anfordern eines Zugriffstokens für die Zielressource verwenden.The application can use the authorization code to request an access token for the target resource.
session_statesession_state Ein eindeutiger Wert, der die aktuelle Benutzersitzung identifiziert.A unique value that identifies the current user session. Dieser Wert ist eine GUID, sollte jedoch als opaker Wert behandelt werden, der ohne Prüfung übergeben wird.This value is a GUID, but should be treated as an opaque value that is passed without examination.
statestate 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. Es hat sich bewährt, wenn die Anwendung überprüft, ob die Statuswerte in der Anforderung und in der Antwort identisch sind, bevor die Antwort verwendet wird.It's a good practice for the application to verify that the state values in the request and response are identical before using the response. Dies trägt zur Erkennung von Angriffen vom Typ „websiteübergreifende Anforderungsfälschung“ auf den Client bei.This helps to detect Cross-Site Request Forgery (CSRF) attacks against the client.

FehlerantwortError response

Fehlerantworten können auch an den redirect_uri gesendet werden, damit die App diese entsprechend behandeln kann.Error responses may also be sent to the redirect_uri so that the application can handle them appropriately.

GET http://localhost:12345/?
error=access_denied
&error_description=the+user+canceled+the+authentication
ParameterParameter BESCHREIBUNGDescription
errorerror Ein in Abschnitt 5.2 definierter Fehlercodewert des OAuth 2.0-Autorisierungsframeworks.An error code value defined in Section 5.2 of the OAuth 2.0 Authorization Framework. In der folgenden Tabelle finden Sie die Fehlercodes, die von Azure AD ausgegeben werden.The next table describes the error codes that Azure AD returns.
error_descriptionerror_description Detailliertere Beschreibung des Fehlers.A more detailed description of the error. Diese Meldung ist nicht für den Endbenutzer ausgelegt.This message is not intended to be end-user friendly.
statestate Der Statuswert ist ein zufällig generierter, nicht wiederverwendeter Wert, der in der Anforderung versendet und in der Antwort zurückgegeben wird, um webseitenübergreifende Anforderungsfälschungen (CSFR) zu vermeiden.The state value is a randomly generated non-reused value that is sent in the request and returned in the response to prevent cross-site request forgery (CSRF) attacks.

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_requestinvalid_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 Eingangstests festgestellt wird.This is a development error, and is typically caught during initial testing.
unauthorized_clientunauthorized_client Die Clientanwendung darf keinen Autorisierungscode anfordern.The client application is not permitted to request an authorization code. 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 is not registered in Azure AD or is not 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_deniedaccess_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 cannot proceed unless the user consents.
unsupported_response_typeunsupported_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 Eingangstests festgestellt wird.This is a development error, and is typically caught during initial testing.
server_errorserver_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 due to a temporary error.
temporarily_unavailabletemporarily_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 due to a temporary condition.
invalid_resourceinvalid_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 cannot find it, or it is 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.

Fordern Sie ein Zugriffstoken mithilfe des Autorisierungscodes an.Use the authorization code to request an access token

Wenn Sie einen Autorisierungscode erworben und die Berechtigung vom Benutzer erhalten haben, können Sie den Code für ein Zugriffstoken auf die gewünschte Ressource einlösen, indem Sie eine POST-Anforderung an den /token -Endpunkt senden: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, by sending a POST request to the /token endpoint:

// Line breaks for legibility only

POST /{tenant}/oauth2/token HTTP/1.1
Host: https://login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code
&client_id=2d4d11a2-f814-46a7-890a-274a72a7309e
&code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrqqf_ZT_p5uEAEJJ_nZ3UmphWygRNy2C3jJ239gV_DBnZ2syeg95Ki-374WHUP-i3yIhv5i-7KU2CEoPXwURQp6IVYMw-DjAOzn7C3JCu5wpngXmbZKtJdWmiBzHpcO2aICJPu1KvJrDLDP20chJBXzVYJtkfjviLNNW7l7Y3ydcHDsBRKZc3GuMQanmcghXPyoDg41g8XbwPudVh7uCmUponBQpIhbuffFP_tbV8SNzsPoFz9CLpBCZagJVXeqWoYMPe2dSsPiLO9Alf_YIe5zpi-zY4C3aLw5g9at35eZTfNd0gBRpR5ojkMIcZZ6IgAA
&redirect_uri=https%3A%2F%2Flocalhost%3A12345
&resource=https%3A%2F%2Fservice.contoso.com%2F
&client_secret=p@ssw0rd

//NOTE: client_secret only required for web apps
ParameterParameter BESCHREIBUNGDescription
tenanttenant 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. Die zulässigen Werte sind Mandantenbezeichner (also etwa 8eaef023-2b34-4da1-9baa-8bc8c9d6a490, contoso.onmicrosoft.com oder für mandantenunabhängige Token common).The allowed values are tenant identifiers, for example, 8eaef023-2b34-4da1-9baa-8bc8c9d6a490 or contoso.onmicrosoft.com or common for tenant-independent tokens
client_idclient_id requiredrequired Die Anwendungs-Id, die Ihrer App zugewiesen wird, wenn Sie sie mit Azure AD registrieren.The Application Id assigned to your app when you registered it with Azure AD. Diese finden Sie im Azure-Portal.You can find this in the Azure portal. Die Anwendungs-ID wird in den Einstellungen der App-Registrierung angezeigt.The Application Id is displayed in the settings of the app registration.
grant_typegrant_type requiredrequired Muss der authorization_code für den Autorisierungscodefluss sein.Must be authorization_code for the authorization code flow.
codecode requiredrequired Der authorization_code , den Sie im vorherigen Abschnitt abgerufen haben.The authorization_code that you acquired in the previous section
redirect_uriredirect_uri requiredrequired Ein redirect_uri für die Clientanwendung registriert.A redirect_uriregistered on the client application.
client_secretclient_secret Erforderlich für Web-Apps. Für öffentliche Clients nicht zulässig.required for web apps, not allowed for public clients Das Anwendungsgeheimnis, das Sie für Ihre App im Azure-Portal unter Schlüssel erstellt haben.The application secret that you created in the Azure Portal for your app under Keys. Er darf nicht in einer nativen App (öffentlicher Client) verwendet werden, da Clientgeheimnisse nicht zuverlässig auf Geräten gespeichert werden können.It cannot be used in a native app (public client), because client_secrets cannot be reliably stored on devices. Er ist für Web-Apps und Web-APIs (alle vertraulichen Clients) erforderlich, die client_secret sicher auf dem Server speichern können.It is required for web apps and web APIs (all confidential clients), which have the ability to store the client_secret securely on the server side. Der geheime Clientschlüssel (client_secret) sollte vor dem Senden URL-codiert werden.The client_secret should be URL-encoded before being sent.
resourceresource empfohlenrecommended Der App-ID-URI der Ziel-Web-API (geschützte Ressource).The App ID URI of the target web API (secured resource). Klicken Sie zum Ermitteln des App-ID-URI im Azure-Portal auf Azure Active Directory und auf App-Registrierungen. Öffnen Sie anschließend die Seite Einstellungen, und klicken Sie auf Eigenschaften.To find the App ID URI, in the Azure Portal, click Azure Active Directory, click Application registrations, open the application's Settings page, then click Properties. Es kann sich auch um eine externe Ressource wie https://graph.microsoft.com handeln.It may also be an external resource like https://graph.microsoft.com. Dieser Parameter muss in einer der Autorisierungs- oder Tokenanforderungen vorhanden sein,This is required in one of either the authorization or token requests. um sicherzustellen, dass weniger Authentifizierungsanforderungen diesen in die Autorisierungsanforderung platzieren und so die Zustimmung des Benutzers empfangen wird.To ensure fewer authentication prompts place it in the authorization request to ensure consent is received from the user. Wenn dieser in der Autorisierungs- und Tokenanforderung enthalten ist, müssen die Ressourcenparameter übereinstimmen.If in both the authorization request and the token request, the resource` parameters must match.
code_verifiercode_verifier optionaloptional 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

Klicken Sie zum Ermitteln des App-ID-URI im Azure-Portal auf Azure Active Directory und auf App-Registrierungen. Öffnen Sie anschließend die Seite Einstellungen, und klicken Sie auf Eigenschaften.To find the App ID URI, in the Azure Portal, click Azure Active Directory, click Application registrations, open the application's Settings page, then click Properties.

Erfolgreiche AntwortSuccessful response

Azure AD gibt bei einer erfolgreichen Antwort ein Zugriffstoken zurück.Azure AD returns an access token upon a successful response. Um die Anzahl von Netzwerkaufrufen der Clientanwendung und die damit verbundene Latenz zu verringern, sollte die Clientanwendung Zugriffstoken für die Tokenlebensdauer zwischenspeichern, die in der OAuth 2.0-Antwort angegeben ist.To minimize network calls from the client application and their associated latency, the client application should cache access tokens for the token lifetime that is specified in the OAuth 2.0 response. Verwenden Sie zum Bestimmen der Tokenlebensdauer entweder den Parameterwert expires_in oder expires_on.To determine the token lifetime, use either the expires_in or expires_on parameter values.

Wenn eine Web-API-Ressource den Fehlercode invalid_token zurückgibt, kann dies darauf hinweisen, dass von der Ressource ein abgelaufenes Token ermittelt wurde.If a web API resource returns an invalid_token error code, this might indicate that the resource has determined that the token is expired. Falls sich die Zeiten der Client- und Ressourcenuhr unterscheiden (als „zeitlicher Versatz“ bezeichnet), wird das Token von der Ressource ggf. als abgelaufen angesehen, bevor das Token aus dem Clientcache entfernt wird.If the client and resource clock times are different (known as a "time skew"), the resource might consider the token to be expired before the token is cleared from the client cache. Löschen Sie das Token in diesem Fall auch dann aus dem Cache, wenn der berechnete Lebensdauerzeitraum noch nicht abgelaufen ist.If this occurs, clear the token from the cache, even if it is still within its calculated lifetime.

Eine erfolgreiche Antwort sieht wie folgt aus:A successful response could look like this:

{
  "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1THdqcHdBSk9NOW4tQSJ9.eyJhdWQiOiJodHRwczovL3NlcnZpY2UuY29udG9zby5jb20vIiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvN2ZlODE0NDctZGE1Ny00Mzg1LWJlY2ItNmRlNTdmMjE0NzdlLyIsImlhdCI6MTM4ODQ0MDg2MywibmJmIjoxMzg4NDQwODYzLCJleHAiOjEzODg0NDQ3NjMsInZlciI6IjEuMCIsInRpZCI6IjdmZTgxNDQ3LWRhNTctNDM4NS1iZWNiLTZkZTU3ZjIxNDc3ZSIsIm9pZCI6IjY4Mzg5YWUyLTYyZmEtNGIxOC05MWZlLTUzZGQxMDlkNzRmNSIsInVwbiI6ImZyYW5rbUBjb250b3NvLmNvbSIsInVuaXF1ZV9uYW1lIjoiZnJhbmttQGNvbnRvc28uY29tIiwic3ViIjoiZGVOcUlqOUlPRTlQV0pXYkhzZnRYdDJFYWJQVmwwQ2o4UUFtZWZSTFY5OCIsImZhbWlseV9uYW1lIjoiTWlsbGVyIiwiZ2l2ZW5fbmFtZSI6IkZyYW5rIiwiYXBwaWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctODkwYS0yNzRhNzJhNzMwOWUiLCJhcHBpZGFjciI6IjAiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJhY3IiOiIxIn0.JZw8jC0gptZxVC-7l5sFkdnJgP3_tRjeQEPgUn28XctVe3QqmheLZw7QVZDPCyGycDWBaqy7FLpSekET_BftDkewRhyHk9FW_KeEz0ch2c3i08NGNDbr6XYGVayNuSesYk5Aw_p3ICRlUV1bqEwk-Jkzs9EEkQg4hbefqJS6yS1HoV_2EsEhpd_wCQpxK89WPs3hLYZETRJtG5kvCCEOvSHXmDE6eTHGTnEgsIk--UlPe275Dvou4gEAwLofhLDQbMSjnlV5VLsjimNBVcSRFShoxmQwBJR_b2011Y5IuD6St5zPnzruBbZYkGNurQK63TJPWmRd3mbJsGM0mf3CUQ",
  "token_type": "Bearer",
  "expires_in": "3600",
  "expires_on": "1388444763",
  "resource": "https://service.contoso.com/",
  "refresh_token": "AwABAAAAvPM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4rTfgV29ghDOHRc2B-C_hHeJaJICqjZ3mY2b_YNqmf9SoAylD1PycGCB90xzZeEDg6oBzOIPfYsbDWNf621pKo2Q3GGTHYlmNfwoc-OlrxK69hkha2CF12azM_NYhgO668yfcUl4VBbiSHZyd1NVZG5QTIOcbObu3qnLutbpadZGAxqjIbMkQ2bQS09fTrjMBtDE3D6kSMIodpCecoANon9b0LATkpitimVCrl-NyfN3oyG4ZCWu18M9-vEou4Sq-1oMDzExgAf61noxzkNiaTecM-Ve5cq6wHqYQjfV9DOz4lbceuYCAA",
  "scope": "https%3A%2F%2Fgraph.microsoft.com%2Fmail.read",
  "id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctODkwYS0yNzRhNzJhNzMwOWUiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC83ZmU4MTQ0Ny1kYTU3LTQzODUtYmVjYi02ZGU1N2YyMTQ3N2UvIiwiaWF0IjoxMzg4NDQwODYzLCJuYmYiOjEzODg0NDA4NjMsImV4cCI6MTM4ODQ0NDc2MywidmVyIjoiMS4wIiwidGlkIjoiN2ZlODE0NDctZGE1Ny00Mzg1LWJlY2ItNmRlNTdmMjE0NzdlIiwib2lkIjoiNjgzODlhZTItNjJmYS00YjE4LTkxZmUtNTNkZDEwOWQ3NGY1IiwidXBuIjoiZnJhbmttQGNvbnRvc28uY29tIiwidW5pcXVlX25hbWUiOiJmcmFua21AY29udG9zby5jb20iLCJzdWIiOiJKV3ZZZENXUGhobHBTMVpzZjd5WVV4U2hVd3RVbTV5elBtd18talgzZkhZIiwiZmFtaWx5X25hbWUiOiJNaWxsZXIiLCJnaXZlbl9uYW1lIjoiRnJhbmsifQ."
}

ParameterParameter BESCHREIBUNGDescription
access_tokenaccess_token Das angeforderte Zugriffstoken als signiertes JSON-Webtoken (JWT).The requested access token as a signed JSON Web Token (JWT). Die App kann dieses Token zur Authentifizierung auf 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_typetoken_type Gibt den Wert des Tokentyps an.Indicates the token type value. Bearertoken ist der einzige Typ, den Azure AD unterstützt.The only type that Azure AD supports is Bearer. Weitere Informationen zu Bearertoken finden Sie unter OAuth 2.0-Autorisierungsframework: Verwendung von Bearertoken (RFC 6750).For more information about Bearer tokens, see OAuth2.0 Authorization Framework: Bearer Token Usage (RFC 6750)
expires_inexpires_in Gibt an, wie lange das Zugriffstoken (in Sekunden) gültig ist.How long the access token is valid (in seconds).
expires_onexpires_on Die Uhrzeit, zu der das Zugriffstoken abläuft.The time when the access token expires. Das Datum wird als Anzahl der Sekunden ab 1970-01-01T0:0:0Z UTC bis zur Ablaufzeit dargestellt.The date is represented as the number of seconds from 1970-01-01T0:0:0Z UTC until the expiration time. Dieser Wert wird verwendet, um die Lebensdauer von zwischengespeicherten Token zu bestimmen.This value is used to determine the lifetime of cached tokens.
resourceresource Der App-ID-URI der Web-API (geschützte Ressource).The App ID URI of the web API (secured resource).
scopescope Die Identitätswechselberechtigungen, die der Clientanwendung gewährt wurden.Impersonation permissions granted to the client application. Die Standardberechtigung ist user_impersonation.The default permission is user_impersonation. Der Besitzer der gesicherten Ressource kann zusätzliche Werte in Azure AD registrieren.The owner of the secured resource can register additional values in Azure AD.
refresh_tokenrefresh_token Ein Aktualisierungstoken von OAuth 2.0.An OAuth 2.0 refresh token. Die App kann dieses Token verwenden, um nach Ablauf der aktuellen Zugriffstoken zusätzliche Zugriffstoken zu erhalten.The app can use this token to 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.
id_tokenid_token Ein nicht signiertes JSON-Webtoken (JWT), das ein ID-Token darstellt.An unsigned JSON Web Token (JWT) representing an ID token. Die App kann die Segmente dieses Tokens mit einer base64-URL decodieren, um Informationen über den angemeldeten Benutzer abzurufen.The app can base64Url 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 jedoch nicht für Autorisierungs- und Sicherheitsgrenzen auf sie 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 JSON-Webtoken finden Sie im JWT IETF-Spezifikationsentwurf.For more information about JSON web tokens, see the JWT IETF draft specification. Weitere Informationen zu id_tokens finden Sie unter v1.0 OpenID Connect-Datenfluss.To learn more about id_tokens, see the v1.0 OpenID Connect flow.

FehlerantwortError response

Die Fehler am Tokenausstellungs-Endpunkt sind HTTP-Fehlercodes, da der Client den Tokenausstellungs-Endpunkt direkt aufruft.The token issuance endpoint errors are HTTP error codes, because the client calls the token issuance endpoint directly. Zusätzlich zum HTTP-Statuscode gibt der Azure AD-Tokenausstellungs-Endpunkt auch ein JSON-Dokument mit Objekten zurück, die den Fehler beschreiben.In addition to the HTTP status code, the Azure AD token issuance endpoint also returns a JSON document with objects that describe the error.

Eine Beispiel für eine Fehlerantwort sieht wie folgt aus:A sample error response could look like this:

{
  "error": "invalid_grant",
  "error_description": "AADSTS70002: Error validating credentials. AADSTS70008: The provided authorization code or refresh token is expired. Send a new interactive authorization request for this user and resource.\r\nTrace ID: 3939d04c-d7ba-42bf-9cb7-1e5854cdce9e\r\nCorrelation ID: a8125194-2dc8-4078-90ba-7b6592a7f231\r\nTimestamp: 2016-04-11 18:00:12Z",
  "error_codes": [
    70002,
    70008
  ],
  "timestamp": "2016-04-11 18:00:12Z",
  "trace_id": "3939d04c-d7ba-42bf-9cb7-1e5854cdce9e",
  "correlation_id": "a8125194-2dc8-4078-90ba-7b6592a7f231"
}
ParameterParameter BESCHREIBUNGDescription
errorerror 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_descriptionerror_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_codeserror_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.
timestamptimestamp Der Zeitpunkt, zu dem der Fehler aufgetreten istThe time at which the error occurred.
trace_idtrace_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_idcorrelation_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.

HTTP-StatuscodesHTTP status codes

Die folgende Tabelle enthält die HTTP-Statuscodes, die vom Tokenausstellungs-Endpunkt zurückgegeben werden.The following table lists the HTTP status codes that the token issuance endpoint returns. In einigen Fällen ist der Fehlercode ausreichend, um die Antwort zu beschreiben. Wenn jedoch Fehler auftreten, müssen Sie die zugehörigen JSON-Dokumente analysieren und den Fehlercode überprüfen.In some cases, the error code is sufficient to describe the response, but if there are errors, you need to parse the accompanying JSON document and examine its error code.

HTTP-CodeHTTP Code BESCHREIBUNGDescription
400400 Standard-HTTP-Code.Default HTTP code. Wird in den meisten Fällen verwendet und wird in der Regel aufgrund einer fehlerhaften Anforderung ausgegeben.Used in most cases and is typically due to a malformed request. Korrigieren Sie die Anforderung, und senden Sie sie erneut.Fix and resubmit the request.
401401 Fehler bei der Authentifizierung.Authentication failed. Tritt beispielsweise auf, wenn die Anforderung den Parameter „client_secret“ nicht enthält.For example, the request is missing the client_secret parameter.
403403 Fehler bei der Autorisierung.Authorization failed. Der Benutzer verfügt beispielsweise nicht über die Berechtigung zum Zugriff auf die Ressource.For example, the user does not have permission to access the resource.
500500 Ein interner Fehler ist beim Dienst aufgetreten.An internal error has occurred at the service. Wiederholen Sie die Anforderung.Retry the request.

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

FehlercodeError Code BESCHREIBUNGDescription ClientaktionClient Action
invalid_requestinvalid_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
invalid_grantinvalid_grant Der Autorisierungscode ist ungültig oder abgelaufen.The authorization code is invalid or has expired. Versuchen Sie, eine neue Anforderung an den /authorize-Endpunkt zu senden.Try a new request to the /authorize endpoint
unauthorized_clientunauthorized_client Der authentifizierte Client ist zur Verwendung dieses Autorisierungsgewährungstyps nicht autorisiert.The authenticated client is not 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 is not registered in Azure AD or is not 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_clientinvalid_client Clientauthentifizierung fehlgeschlagen.Client authentication failed. Die Client-Anmeldeinformationen sind nicht gültig.The client credentials are not valid. Um das Problem zu beheben, aktualisiert der Anwendungsadministrator die Anmeldeinformationen.To fix, the application administrator updates the credentials.
unsupported_grant_typeunsupported_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_resourceinvalid_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 cannot find it, or it is 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_requiredinteraction_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 derselben Ressource mit einer interaktiven Autorisierungsanforderung anstelle einer nicht interaktiven Anforderung.Instead of a non-interactive request, retry with an interactive authorization request for the same resource.
temporarily_unavailabletemporarily_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 due to a temporary condition.

Verwenden des Zugriffstokens für den Zugriff auf die RessourceUse the access token to access the resource

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. Die Spezifikation RFC 6750 erklärt, wie Bearertoken in HTTP-Anforderungen für den Zugriff auf geschützte Ressourcen verwendet werden.The RFC 6750 specification explains how to use bearer tokens in HTTP requests to access protected resources.

Beispiel für eine AnforderungSample request

GET /data HTTP/1.1
Host: service.contoso.com
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1THdqcHdBSk9NOW4tQSJ9.eyJhdWQiOiJodHRwczovL3NlcnZpY2UuY29udG9zby5jb20vIiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvN2ZlODE0NDctZGE1Ny00Mzg1LWJlY2ItNmRlNTdmMjE0NzdlLyIsImlhdCI6MTM4ODQ0MDg2MywibmJmIjoxMzg4NDQwODYzLCJleHAiOjEzODg0NDQ3NjMsInZlciI6IjEuMCIsInRpZCI6IjdmZTgxNDQ3LWRhNTctNDM4NS1iZWNiLTZkZTU3ZjIxNDc3ZSIsIm9pZCI6IjY4Mzg5YWUyLTYyZmEtNGIxOC05MWZlLTUzZGQxMDlkNzRmNSIsInVwbiI6ImZyYW5rbUBjb250b3NvLmNvbSIsInVuaXF1ZV9uYW1lIjoiZnJhbmttQGNvbnRvc28uY29tIiwic3ViIjoiZGVOcUlqOUlPRTlQV0pXYkhzZnRYdDJFYWJQVmwwQ2o4UUFtZWZSTFY5OCIsImZhbWlseV9uYW1lIjoiTWlsbGVyIiwiZ2l2ZW5fbmFtZSI6IkZyYW5rIiwiYXBwaWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctODkwYS0yNzRhNzJhNzMwOWUiLCJhcHBpZGFjciI6IjAiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJhY3IiOiIxIn0.JZw8jC0gptZxVC-7l5sFkdnJgP3_tRjeQEPgUn28XctVe3QqmheLZw7QVZDPCyGycDWBaqy7FLpSekET_BftDkewRhyHk9FW_KeEz0ch2c3i08NGNDbr6XYGVayNuSesYk5Aw_p3ICRlUV1bqEwk-Jkzs9EEkQg4hbefqJS6yS1HoV_2EsEhpd_wCQpxK89WPs3hLYZETRJtG5kvCCEOvSHXmDE6eTHGTnEgsIk--UlPe275Dvou4gEAwLofhLDQbMSjnlV5VLsjimNBVcSRFShoxmQwBJR_b2011Y5IuD6St5zPnzruBbZYkGNurQK63TJPWmRd3mbJsGM0mf3CUQ

FehlerantwortError Response

Gesicherte Ressourcen, die RFC 6750 implementieren, geben HTTP-Statuscodes zurück.Secured resources that implement RFC 6750 issue HTTP status codes. Wenn die Anforderung keine Authentifizierungsinformationen enthält oder wenn das Token fehlt, enthält die Antwort einen WWW-Authenticate -Header.If the request does not include authentication credentials or is missing the token, the response includes an WWW-Authenticate header. Wenn eine Anforderung fehlschlägt, antwortet der Ressourcenserver mit einem HTTP-Statuscode und einem Fehlercode.When a request fails, the resource server responds with the HTTP status code and an error code.

Im Folgenden finden Sie ein Beispiel für eine nicht erfolgreiche Antwort, wenn die Clientanforderung das Bearertoken nicht enthält:The following is an example of an unsuccessful response when the client request does not include the bearer token:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer authorization_uri="https://login.microsoftonline.com/contoso.com/oauth2/authorize",  error="invalid_token",  error_description="The access token is missing.",

FehlerparameterError parameters

ParameterParameter BESCHREIBUNGDescription
authorization_uriauthorization_uri Der URI (physische Endpunkt) des Autorisierungsservers.The URI (physical endpoint) of the authorization server. Dieser Wert wird auch als Suchschlüssel verwendet, um weitere Informationen über den Server aus einem Discovery-Endpunkt zu erhalten.This value is also used as a lookup key to get more information about the server from a discovery endpoint.

Der Client muss überprüfen, ob der Autorisierungsserver vertrauenswürdig ist.The client must validate that the authorization server is trusted. Wenn die Ressource von Azure AD geschützt wird, ist die Prüfung ausreichend, ob die URL mit https://login.microsoftonline.com oder einem anderen Hostnamen beginnt, den Azure AD unterstützt.When the resource is protected by Azure AD, it is sufficient to verify that the URL begins with https://login.microsoftonline.com or another hostname that Azure AD supports. Eine mandantenspezifische Ressource sollte immer einen mandantenspezifischen Autorisierungs-URI zurückgeben.A tenant-specific resource should always return a tenant-specific authorization URI.

errorerror Ein in Abschnitt 5.2 definierter Fehlercodewert des OAuth 2.0-Autorisierungsframeworks.An error code value defined in Section 5.2 of the OAuth 2.0 Authorization Framework.
error_descriptionerror_description Detailliertere Beschreibung des Fehlers.A more detailed description of the error. Diese Meldung ist nicht für den Endbenutzer ausgelegt.This message is not intended to be end-user friendly.
resource_idresource_id Gibt den eindeutigen Bezeichner der Ressource zurück.Returns the unique identifier of the resource. Die Clientanwendung kann diesen Bezeichner als Wert für den resource -Parameter verwenden, wenn sie ein Token für die Ressource anfordert.The client application can use this identifier as the value of the resource parameter when it requests a token for the resource.

Es ist wichtig, dass die Clientanwendung diesen Wert überprüft, da andernfalls ein schädlicher Dienst möglicherweise einen Angriff mit einer Erhöhung von Rechten durchführt.It is important for the client application to verify this value, otherwise a malicious service might be able to induce an elevation-of-privileges attack

Die empfohlene Strategie zur Verhinderung eines Angriffs besteht darin sicherzustellen, dass die resource_id mit dem Basiselement der Web-API-URL übereinstimmt, auf die zugegriffen wird.The recommended strategy for preventing an attack is to verify that the resource_id matches the base of the web API URL that being accessed. Wenn beispielsweise auf https://service.contoso.com/data zugegriffen wird, kann die resource_id „htttps://service.contoso.com/“ lauten.For example, if https://service.contoso.com/data is being accessed, the resource_id can be htttps://service.contoso.com/. Die Clientanwendung muss eine resource_id ablehnen, die nicht mit der Basis-URL beginnt, sofern es kein zuverlässiges alternatives Verfahren zum Überprüfen der ID gibt.The client application must reject a resource_id that does not begin with the base URL unless there is a reliable alternate way to verify the id.

Bearerschema-FehlercodesBearer scheme error codes

Die Spezifikation RFC 6750 definiert die folgenden Fehler für Ressourcen, die in der Antwort den WWW-Authenticate-Header und das Bearer-Schema verwenden.The RFC 6750 specification defines the following errors for resources that use the WWW-Authenticate header and Bearer scheme in the response.

HTTP-StatuscodeHTTP Status Code FehlercodeError Code BESCHREIBUNGDescription ClientaktionClient Action
400400 invalid_requestinvalid_request Die Anforderung ist nicht richtig formatiert.The request is not well-formed. Möglicherweise fehlt ein Parameter, oder der gleiche Parameter wird zweimal verwendet.For example, it might be missing a parameter or using the same parameter twice. Beheben Sie den Fehler, und wiederholen Sie die Anforderung.Fix the error and retry 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 in initial testing.
401401 invalid_tokeninvalid_token Das Zugriffstoken ist nicht vorhanden, ungültig oder wurde widerrufen.The access token is missing, invalid, or is revoked. Der Wert des Parameters „error_description“ enthält weitere Details.The value of the error_description parameter provides additional detail. Fordern Sie ein neues Token vom Autorisierungsserver an.Request a new token from the authorization server. Wenn das neue Token fehlschlägt, ist ein unerwarteter Fehler aufgetreten.If the new token fails, an unexpected error has occurred. Sendet eine Fehlermeldung an den Benutzer. Eine Wiederholung erfolgt nach einer beliebigen Zeitspanne.Send an error message to the user and retry after random delays.
403403 insufficient_scopeinsufficient_scope Das Zugriffstoken enthält nicht die erforderlichen Berechtigungen zum Identitätswechsel, um auf die Ressource zuzugreifen.The access token does not contain the impersonation permissions required to access the resource. Senden Sie eine neue Autorisierungsanforderung an den Autorisierungsendpunkt.Send a new authorization request to the authorization endpoint. Wenn die Antwort den Bereichsparameter enthält, verwenden Sie den Bereichswert in der Anforderung für die Ressource.If the response contains the scope parameter, use the scope value in the request to the resource.
403403 insufficient_accessinsufficient_access Der Antragsteller des Tokens besitzt nicht die Berechtigungen, die für den Zugriff auf die Ressource erforderlich sind.The subject of the token does not have the permissions that are required to access the resource. Der Benutzer wird aufgefordert, ein anderes Konto zu verwenden oder Berechtigungen für die angegebene Ressource anzufordern.Prompt the user to use a different account or to request permissions to the specified resource.

Aktualisieren der ZugriffstokenRefreshing the access tokens

Zugriffstoken sind kurzlebig und müssen nach Ablauf aktualisiert werden, damit Sie weiterhin auf Ressourcen zugreifen können.Access Tokens are short-lived and must be refreshed after they expire to continue accessing resources. Übermitteln Sie zum Aktualisieren von access_token eine weitere POST-Anforderung an den /token-Endpunkt, und zwar dieses Mal unter Angabe des refresh_token anstelle von code.You can refresh the access_token by submitting another POST request to the /token endpoint, but this time providing the refresh_token instead of the code. Aktualisierungstoken sind für alle Ressourcen gültig, für die Ihrem Client bereits die Zustimmung zum Zugriff erteilt wurde. Daher kann ein Aktualisierungstoken, das für eine Anforderung für resource=https://graph.microsoft.com ausgestellt wurde, zum Anfordern eines neuen Zugriffstokens für resource=https://contoso.com/api verwendet werden.Refresh tokens are valid for all resources that your client has already been given consent to access - thus, a refresh token issued on a request for resource=https://graph.microsoft.com can be used to request a new access token for resource=https://contoso.com/api.

Für Aktualisierungstoken werden keine Lebensdauern angegeben.Refresh tokens 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 Tokenausstellungs-Endpunkt zurückgegeben werden, erwartet und richtig behandelt werden.Your application needs to expect and handle errors returned by the token issuance endpoint correctly.

Wenn Sie eine Antwort mit einem Aktualisierungstokenfehler erhalten, sollten Sie das aktuelle Aktualisierungstoken verwerfen und einen neuen Autorisierungscode oder ein neues Zugriffstoken anfordern.When you receive a response with a refresh token error, discard the current refresh token and request a new authorization code or access token. Wenn Sie ein Aktualisierungstoken im Ablauf der Autorisierungscodeerteilung verwenden und eine Antwort mit dem Fehlercode interaction_required oder invalid_grant erhalten, sollten Sie besonders darauf achten, dass Sie das Aktualisierungstoken verwerfen und einen neuen Autorisierungscode anfordern.In particular, when using a refresh token in the Authorization Code Grant flow, if you receive a response with the interaction_required or invalid_grant error codes, discard the refresh token and request a new authorization code.

Ein Beispiel für eine Anforderung an den mandantenspezifischen Endpunkt (Sie können auch den allgemeinen Endpunkt verwenden), um ein neues Zugriffstoken mithilfe eines Aktualisierungstokens abzurufen, sieht wie folgt aus:A sample request to the tenant-specific endpoint (you can also use the common endpoint) to get a new access token using a refresh token looks like this:

// Line breaks for legibility only

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

client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&refresh_token=OAAABAAAAiL9Kn2Z27UubvWFPbm0gLWQJVzCTE9UkP3pSx1aXxUjq...
&grant_type=refresh_token
&resource=https%3A%2F%2Fservice.contoso.com%2F
&client_secret=JqQX2PNo9bpM0uEihUPzyrh    // NOTE: Only required for web apps

Erfolgreiche AntwortSuccessful response

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

{
  "token_type": "Bearer",
  "expires_in": "3600",
  "expires_on": "1460404526",
  "resource": "https://service.contoso.com/",
  "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1THdqcHdBSk9NOW4tQSJ9.eyJhdWQiOiJodHRwczovL3NlcnZpY2UuY29udG9zby5jb20vIiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvN2ZlODE0NDctZGE1Ny00Mzg1LWJlY2ItNmRlNTdmMjE0NzdlLyIsImlhdCI6MTM4ODQ0MDg2MywibmJmIjoxMzg4NDQwODYzLCJleHAiOjEzODg0NDQ3NjMsInZlciI6IjEuMCIsInRpZCI6IjdmZTgxNDQ3LWRhNTctNDM4NS1iZWNiLTZkZTU3ZjIxNDc3ZSIsIm9pZCI6IjY4Mzg5YWUyLTYyZmEtNGIxOC05MWZlLTUzZGQxMDlkNzRmNSIsInVwbiI6ImZyYW5rbUBjb250b3NvLmNvbSIsInVuaXF1ZV9uYW1lIjoiZnJhbmttQGNvbnRvc28uY29tIiwic3ViIjoiZGVOcUlqOUlPRTlQV0pXYkhzZnRYdDJFYWJQVmwwQ2o4UUFtZWZSTFY5OCIsImZhbWlseV9uYW1lIjoiTWlsbGVyIiwiZ2l2ZW5fbmFtZSI6IkZyYW5rIiwiYXBwaWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctODkwYS0yNzRhNzJhNzMwOWUiLCJhcHBpZGFjciI6IjAiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJhY3IiOiIxIn0.JZw8jC0gptZxVC-7l5sFkdnJgP3_tRjeQEPgUn28XctVe3QqmheLZw7QVZDPCyGycDWBaqy7FLpSekET_BftDkewRhyHk9FW_KeEz0ch2c3i08NGNDbr6XYGVayNuSesYk5Aw_p3ICRlUV1bqEwk-Jkzs9EEkQg4hbefqJS6yS1HoV_2EsEhpd_wCQpxK89WPs3hLYZETRJtG5kvCCEOvSHXmDE6eTHGTnEgsIk--UlPe275Dvou4gEAwLofhLDQbMSjnlV5VLsjimNBVcSRFShoxmQwBJR_b2011Y5IuD6St5zPnzruBbZYkGNurQK63TJPWmRd3mbJsGM0mf3CUQ",
  "refresh_token": "AwABAAAAv YNqmf9SoAylD1PycGCB90xzZeEDg6oBzOIPfYsbDWNf621pKo2Q3GGTHYlmNfwoc-OlrxK69hkha2CF12azM_NYhgO668yfcUl4VBbiSHZyd1NVZG5QTIOcbObu3qnLutbpadZGAxqjIbMkQ2bQS09fTrjMBtDE3D6kSMIodpCecoANon9b0LATkpitimVCrl PM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4rTfgV29ghDOHRc2B-C_hHeJaJICqjZ3mY2b_YNqmf9SoAylD1PycGCB90xzZeEDg6oBzOIPfYsbDWNf621pKo2Q3GGTHYlmNfwoc-OlrxK69hkha2CF12azM_NYhgO668yfmVCrl-NyfN3oyG4ZCWu18M9-vEou4Sq-1oMDzExgAf61noxzkNiaTecM-Ve5cq6wHqYQjfV9DOz4lbceuYCAA"
}
ParameterParameter BESCHREIBUNGDescription
token_typetoken_type Der Tokentyp.The token type. Der einzige derzeit unterstützte Wert ist bearer.The only supported value is bearer.
expires_inexpires_in Die verbleibende Gültigkeitsdauer des Tokens in Sekunden.The remaining lifetime of the token in seconds. Ein typischer Wert wäre etwa 3600 (eine Stunde).A typical value is 3600 (one hour).
expires_onexpires_on Datum und Uhrzeit, wenn das Token abläuft.The date and time on which the token expires. Das Datum wird als Anzahl der Sekunden ab 1970-01-01T0:0:0Z UTC bis zur Ablaufzeit dargestellt.The date is represented as the number of seconds from 1970-01-01T0:0:0Z UTC until the expiration time.
resourceresource Gibt die gesicherte Ressource an, die das Zugriffstoken für den Zugriff verwenden kann.Identifies the secured resource that the access token can be used to access.
scopescope Die Identitätswechselberechtigungen, die der nativen Clientanwendung gewährt wurden.Impersonation permissions granted to the native client application. Die Standardberechtigung lautet user_impersonation.The default permission is user_impersonation. Der Besitzer der Zielressource kann alternative Werte in Azure AD registrieren.The owner of the target resource can register alternate values in Azure AD.
access_tokenaccess_token Das neue Zugriffstoken, das angefordert wurde.The new access token that was requested.
refresh_tokenrefresh_token Ein neues OAuth 2.0-Aktualisierungstoken, das zum Anfordern neuer Zugriffstoken verwendet werden kann, wenn das Token in dieser Antwort abläuft.A new OAuth 2.0 refresh_token that can be used to request new access tokens when the one in this response expires.

FehlerantwortError response

Eine Beispiel für eine Fehlerantwort sieht wie folgt aus:A sample error response could look like this:

{
  "error": "invalid_resource",
  "error_description": "AADSTS50001: The application named https://foo.microsoft.com/mail.read was not found in the tenant named 295e01fc-0c56-4ac3-ac57-5d0ed568f872. This can happen if the application has not been installed by the administrator of the tenant or consented to by any user in the tenant. You might have sent your authentication request to the wrong tenant.\r\nTrace ID: ef1f89f6-a14f-49de-9868-61bd4072f0a9\r\nCorrelation ID: b6908274-2c58-4e91-aea9-1f6b9c99347c\r\nTimestamp: 2016-04-11 18:59:01Z",
  "error_codes": [
    50001
  ],
  "timestamp": "2016-04-11 18:59:01Z",
  "trace_id": "ef1f89f6-a14f-49de-9868-61bd4072f0a9",
  "correlation_id": "b6908274-2c58-4e91-aea9-1f6b9c99347c"
}
ParameterParameter BESCHREIBUNGDescription
errorerror 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_descriptionerror_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_codeserror_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.
timestamptimestamp Der Zeitpunkt, zu dem der Fehler aufgetreten istThe time at which the error occurred.
trace_idtrace_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_idcorrelation_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.