OAuth 2.0-Autorisierungscodefluss in Azure Active Directory B2COAuth 2.0 authorization code flow in Azure Active Directory B2C

Durch Gewähren des OAuth 2.0-Autorisierungcodes in Apps, die auf einem Gerät installiert sind, können Sie auf geschützte Ressourcen wie Web-APIs zugreifen.You can use the OAuth 2.0 authorization code grant in apps installed on a device to gain access to protected resources, such as web APIs. Mithilfe der Azure Active Directory B2C (Azure AD B2C)-Implementierung von OAuth 2.0 können Sie Ihren Single-Page-Webanwendungen, mobilen Apps und Desktop-Apps Aufgaben zur Registrierung, Anmeldung und sonstiger Identitätsverwaltung hinzufügen.By using the Azure Active Directory B2C (Azure AD B2C) implementation of OAuth 2.0, you can add sign-up, sign-in, and other identity management tasks to your single-page, mobile, and desktop apps. Dieser Artikel ist sprachunabhängig.This article is language-independent. In dem Artikel wird beschrieben, wie HTTP-Nachrichten ohne Verwendung von Open Source-Bibliotheken gesendet und empfangen werden.In the article, we describe how to send and receive HTTP messages without using any open-source libraries. Wir empfehlen Ihnen, nach Möglichkeit die unterstützten Microsoft-Authentifizierungsbibliotheken (MSAL) zu verwenden. Sehen Sie sich dazu die Beispiel-Apps, die MSAL verwenden, an.When possible, we recommend you use the supported Microsoft Authentication Libraries (MSAL).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. Sie können ihn zum Ausführen der Authentifizierung und Autorisierung bei den meisten Anwendungstypen verwenden, einschließlich Webanwendungen, Single-Page-Webanwendungen und nativ installierter Anwendungen.You can use it for authentication and authorization in most application types, including web applications, single-page applications, and natively installed applications. Über den OAuth 2.0-Autorisierungscodeflow können Sie Zugriffstoken und Aktualisierungstoken für Ihre Anwendungen auf sichere Weise abrufen, die für den Zugriff auf mit einem Autorisierungsserver geschützte Ressourcen verwendet werden können.You can use the OAuth 2.0 authorization code flow to securely acquire access tokens and refresh tokens for your applications, which can be used to access resources that are secured by an authorization server. Mit dem Aktualisierungstoken kann der Client neue Zugriffstoken (und Aktualisierungstoken) beschaffen, nachdem das Zugriffstoken abgelaufen ist. Dies ist meist nach einer Stunde der Fall.The refresh token allows the client to acquire new access (and refresh) tokens once the access token expires, typically after one hour.

Dieser Artikel behandelt den OAuth 2.0-Autorisierungscodeflow von öffentlichen Clients.This article focuses on the public clients OAuth 2.0 authorization code flow. Ein öffentlicher Client ist jede Clientanwendung, der nicht bei der sicheren Verwaltung der Integrität von geheimen Kennwörtern vertraut werden kann.A public client is any client application that cannot be trusted to securely maintain the integrity of a secret password. Dazu gehören Single-Page-Webanwendungen, mobile Apps, Desktopanwendungen und im Grunde genommen jede beliebige Anwendung, die auf einem Server ausgeführt werden kann.This includes single-page applications, mobile apps, desktop applications, and essentially any application that doesn't run on a server.

Hinweis

Wenn Sie in einer Web-App mit Azure AD B2C eine Identitätsverwaltung hinzufügen möchten, verwenden Sie OpenID Connect anstelle von OAuth 2.0.To add identity management to a web app by using Azure AD B2C, use OpenID Connect instead of OAuth 2.0.

Azure AD B2C erweitert den OAuth 2.0-Standardfluss, sodass mehr als nur eine einfache Authentifizierung und Autorisierung erfolgt.Azure AD B2C extends the standard OAuth 2.0 flows to do more than simple authentication and authorization. Dabei wird der Benutzerflow eingeführt.It introduces the user flow. Mit Benutzerflows können Sie übe OAuth 2.0 Benutzeroberflächenfunktionen zu Ihrer Anwendung hinzufügen, z.B. für die Registrierung Anmeldung und Profilverwaltung.With user flows, you can use OAuth 2.0 to add user experiences to your application, such as sign-up, sign-in, and profile management. Zu den Identitätsanbietern, die das OAuth 2.0-Protokoll verwenden, zählen Amazon, Azure Active Directory, Facebook, GitHub, Google und LinkedIn.Identity providers that use the OAuth 2.0 protocol include Amazon, Azure Active Directory, Facebook, GitHub, Google, and LinkedIn.

So testen Sie die HTTP-Anforderungen in diesem Artikel:To try the HTTP requests in this article:

  1. Ersetzen Sie {tenant} durch den Namen des Azure AD B2C-Mandanten.Replace {tenant} with the name of your Azure AD B2C tenant.
  2. Ersetzen Sie 90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6 durch die App-ID einer Anwendung, die Sie zuvor in Ihrem Azure AD B2C-Mandanten registriert haben.Replace 90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6 with the app ID of an application you've previously registered in your Azure AD B2C tenant.
  3. Ersetzen Sie {policy} durch den Namen einer Richtlinie, die Sie in Ihrem Mandanten erstellt haben, z. B. b2c_1_sign_in.Replace {policy} with the name of a policy you've created in your tenant, for example b2c_1_sign_in.

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. Wenn Sie zum Aktivieren von CORS einen vorhandenen Umleitungs-URI aktualisieren möchten, können Sie auf der Registerkarte Authentifizierung der App-Registrierung im Abschnitt „Web“ auf die Option „migrieren“ klicken. Alternativ können Sie den Manifest-Editor für App-Registrierungen öffnen und im Abschnitt replyUrlsWithType das Feld type für Ihren Umleitungs-URI auf spa festlegen.To update an existing redirect URI to enable CORS, you can click on the migrate prompt in the "Web" section of the App registration's Authentication tab. Alternatively, you can open the App registrations manifest editor and set the type field for your redirect URI to spa in the replyUrlsWithType section.

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.

1. Abrufen von Autorisierungscodes1. Get 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. Dies ist der interaktive Teil des Flows, bei dem der Benutzer tatsächlich Aktionen durchführt.This is the interactive part of the flow, where the user takes action. In dieser Anforderung gibt der Client im Parameter scope die Berechtigungen an, die er vom Benutzer abrufen muss.In this request, the client indicates in the scope parameter the permissions that it needs to acquire from the user. In den folgenden drei Beispielen (mit Zeilenumbrüchen für bessere Lesbarkeit) wird jeweils ein anderer Benutzerflow verwendet.The following three examples (with line breaks for readability) each use a different user flow.

GET https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/{policy}/oauth2/v2.0/authorize?
client_id=90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6
&response_type=code
&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob
&response_mode=query
&scope=90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6%20offline_access
&state=arbitrary_data_you_can_receive_in_the_response
&code_challenge=YTFjNjI1OWYzMzA3MTI4ZDY2Njg5M2RkNmVjNDE5YmEyZGRhOGYyM2IzNjdmZWFhMTQ1ODg3NDcxY2Nl
&code_challenge_method=S256
ParameterParameter Erforderlich?Required? BESCHREIBUNGDescription
{tenant}{tenant} ErforderlichRequired Name des Azure AD B2C-Mandanten.Name of your Azure AD B2C tenant
{policy}{policy} ErforderlichRequired Der auszuführende Benutzerflow.The user flow to be run. Geben Sie den Namen eines Benutzerflows an, den Sie in Ihrem Azure AD B2C-Mandanten erstellt haben.Specify the name of a user flow you've created in your Azure AD B2C tenant. Beispiel: b2c_1_sign_in, b2c_1_sign_up oder b2c_1_edit_profile.For example: b2c_1_sign_in, b2c_1_sign_up, or b2c_1_edit_profile.
client_idclient_id ErforderlichRequired Die Anwendungs-ID, die Ihrer App im Azure-Portal zugewiesen wird.The application ID assigned to your app in the Azure portal.
response_typeresponse_type ErforderlichRequired Der Antworttyp, der code für den Autorisierungscodefluss enthalten muss.The response type, which must include code for the authorization code flow.
redirect_uriredirect_uri ErforderlichRequired Der Umleitungs-URI der App, in dem Authentifizierungsantworten gesendet und von der App empfangen werden.The redirect URI of your app, where authentication responses are sent and received by your app. Er muss genau mit einem 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 that you registered in the portal, except that it must be URL-encoded.
scopescope ErforderlichRequired Eine durch Leerzeichen getrennte Liste von Bereichen.A space-separated list of scopes. Ein einzelner Bereichswert gibt Azure Active Directory (Azure AD) an, dass beide Berechtigungen angefordert werden.A single scope value indicates to Azure Active Directory (Azure AD) both of the permissions that are being requested. Mit der Verwendung der Client-ID als Bereich wird angegeben, dass für die App ein Zugriffstoken erforderlich ist, das für Ihren eigenen Dienst oder die Web-API mit derselben Client-ID verwendet werden kann.Using the client ID as the scope indicates that your app needs an access token that can be used against your own service or web API, represented by the same client ID. Der Bereich offline_access gibt an, dass Ihre App ein Aktualisierungstoken für den langfristigen Zugriff auf Ressourcen benötigt.The offline_access scope indicates that your app needs a refresh token for long-lived access to resources. Außerdem können Sie den Bereich openid verwenden, um ein ID-Token von Azure AD B2C anzufordern.You also can use the openid scope to request an ID token from Azure AD B2C.
response_moderesponse_mode EmpfohlenRecommended Die Methode, die zum Senden des resultierenden Autorisierungscodes zurück an Ihre App verwendet wird.The method that you use to send the resulting authorization code back to your app. Es kann sich um query, form_post oder fragment handeln.It can be query, form_post, or fragment.
statestate EmpfohlenRecommended Ein Wert in der Anforderung, der eine Zeichenfolge mit beliebigem Inhalt Ihrer Wahl sein kann.A value included in the request that can be a string of any content that you want to use. Normalerweise wird ein zufällig generierter eindeutiger Wert verwendet, um eine websiteübergreifende Anforderungsfälschung zu verhindern.Usually, a randomly generated unique value is used, to prevent cross-site request forgery attacks. Der Status wird außerdem verwendet, um Informationen über den Status des Benutzers in der App zu codieren, bevor die Authentifizierungsanforderung aufgetreten ist.The state also is used to encode information about the user's state in the app before the authentication request occurred. Dies kann z.B. die vom Benutzer besuchte Seite oder der ausgeführte Benutzerflow sein.For example, the page the user was on, or the user flow that was being executed.
promptprompt OptionalOptional Der Typ der erforderlichen Benutzerinteraktion.The type of user interaction that is required. Gegenwärtig ist der einzige gültige Wert login, der den Benutzer zur Eingabe seiner Anmeldeinformationen für diese Anforderung zwingt.Currently, the only valid value is login, which forces the user to enter their credentials on that request. Einmaliges Anmelden wird nicht verwendet.Single sign-on will not take effect.
code_challengecode_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. Dieser SOLLTE S256 lauten, die Spezifikation ermöglicht jedoch die Verwendung von plain, wenn der Client aus irgendeinem Grund SHA256 nicht unterstützt.This SHOULD be S256, but the spec allows the use of plain if for some reason the client cannot support SHA256.

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.
login_hintlogin_hint NeinNo Kann zum Vorabausfüllen des Felds für den Anmeldenamen auf der Anmeldeseite verwendet werden.Can be used to pre-fill the sign-in name field of the sign-in page. Weitere Informationen finden Sie unter Auffüllen des Anmeldenamens.For more information, see Prepopulate the sign-in name.
domain_hintdomain_hint NeinNo Bietet Hinweis für Azure AD B2C zu dem sozialen Netzwerk als Identitätsanbieter, das für die Anmeldung verwendet werden soll.Provides a hint to Azure AD B2C about the social identity provider that should be used for sign-in. Wenn ein gültiger Wert enthalten ist, wird der Benutzer direkt auf die Anmeldeseite des Identitätsanbieters geleitet.If a valid value is included, the user goes directly to the identity provider sign-in page. Weitere Informationen finden Sie unter Umleiten einer Anmeldung zu einem Anbieter sozialer Netzwerke.For more information, see Redirect sign-in to a social provider.
Benutzerdefinierte ParameterCustom parameters NeinNo Benutzerdefinierte Parameter, die mit benutzerdefinierten Richtlinien verwendet werden können.Custom parameters that can be used with custom policies. Beispiele: URI für dynamischen Seiteninhalt oder OAuth2-Schlüssel-Wert-Parameter.For example, dynamic custom page content URI, or key-value claim resolvers.

An diesem Punkt wird der Benutzer aufgefordert, den Workflow des Benutzerflows abzuschließen.At this point, the user is asked to complete the user flow's workflow. Dafür muss der Benutzer z.B. den Benutzernamen und das Kennwort angeben, sich mit der Identität eines sozialen Netzwerks anmelden, sich für das Verzeichnis registrieren oder andere Schritte ausführen.This might involve the user entering their username and password, signing in with a social identity, signing up for the directory, or any other number of steps. Die Benutzeraktionen hängen davon ab, wie der Benutzerflow definiert ist.User actions depend on how the user flow is defined.

Nachdem der Benutzer den Benutzerflow abgeschlossen hat, gibt Azure AD über den für redirect_uri verwendeten Wert eine Antwort an Ihre App zurück.After the user completes the user flow, Azure AD returns a response to your app at the value you used for redirect_uri. Hierzu wird die im Parameter response_mode angegebene Methode verwendet.It uses the method specified in the response_mode parameter. Die Antwort ist in den Benutzeraktionsszenarien immer gleich, unabhängig vom ausgeführten Benutzerflow.The response is exactly the same for each of the user action scenarios, independent of the user flow that was executed.

Eine erfolgreiche Antwort mit response_mode=query sieht wie folgt aus:A successful response that uses response_mode=query looks like this:

GET urn:ietf:wg:oauth:2.0:oob?
code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq...        // the authorization_code, truncated
&state=arbitrary_data_you_can_receive_in_the_response                // the value provided in the request
ParameterParameter BESCHREIBUNGDescription
codecode 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 eine Zielressource verwenden.The app can use the authorization code to request an access token for a target resource. Autorisierungscodes sind von sehr kurzer Lebensdauer.Authorization codes are very short-lived. In der Regel laufen sie nach etwa 10 Minuten ab.Typically, they expire after about 10 minutes.
statestate Die vollständige Beschreibung finden Sie im vorangehenden Abschnitt.See the full description in the table in the preceding section. Wenn ein Parameter state 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 App sollte überprüfen, ob die state-Werte in der Anforderung und in der Antwort identisch sind.The app should verify that the state values in the request and response are identical.

Fehlerantworten können auch an den Umleitungs-URI gesendet werden, damit die App diese entsprechend behandeln kann:Error responses also can be sent to the redirect URI so that the app can handle them appropriately:

GET urn:ietf:wg:oauth:2.0:oob?
error=access_denied
&error_description=The+user+has+cancelled+entering+self-asserted+information
&state=arbitrary_data_you_can_receive_in_the_response
ParameterParameter BESCHREIBUNGDescription
errorerror Eine Fehlercodezeichenfolge, die verwendet werden kann, um unterschiedliche Arten auftretender Fehler zu klassifizieren.An error code string that you can use to classify the types of errors that occur. Sie können mit der Zeichenfolge auch auf Fehler reagieren.You also can use the string to react to errors.
error_descriptionerror_description Eine spezifische Fehlermeldung, mit der Sie die Hauptursache eines Authentifizierungsfehlers identifizieren können.A specific error message that can help you identify the root cause of an authentication error.
statestate Die vollständige Beschreibung finden Sie in der obigen Tabelle.See the full description in the preceding table. Wenn ein Parameter state 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 App sollte überprüfen, ob die state-Werte in der Anforderung und in der Antwort identisch sind.The app should verify that the state values in the request and response are identical.

2. Abrufen eines Zugriffstokens2. Get an access token

Nachdem Sie einen Autorisierungscode abgerufen haben, können Sie den code für ein Token für die gewünschte Ressource einlösen, indem Sie eine POST-Anforderung an den /token-Endpunkt senden.Now that you've acquired an authorization code, you can redeem the code for a token to the intended resource by sending a POST request to the /token endpoint. In Azure AD B2C können Sie Zugriffstoken für andere APIs wie gewohnt anfordern, indem Sie ihre Bereiche in der Anforderung angeben.In Azure AD B2C, you can request access tokens for other API's as usual by specifying their scope(s) in the request.

Sie haben auch die Möglichkeit, ein Zugriffstoken für die Web-API Ihres App-Back-Ends anzufordern, indem Sie die Client-ID der App als angeforderten Bereich verwenden. Dies führt dazu, dass ein Zugriffstoken mit dieser Client-ID als Zielgruppe erstellt wird:You can also request an access token for your app's own back-end Web API by convention of using the app's client ID as the requested scope (which will result in an access token with that client ID as the "audience"):

POST https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/{policy}/oauth2/v2.0/token HTTP/1.1

Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&client_id=90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6&scope=90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6 offline_access&code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq...&redirect_uri=urn:ietf:wg:oauth:2.0:oob&code_verifier=ThisIsntRandomButItNeedsToBe43CharactersLong 
ParameterParameter Erforderlich?Required? BESCHREIBUNGDescription
{tenant}{tenant} ErforderlichRequired Name des Azure AD B2C-Mandanten.Name of your Azure AD B2C tenant
{policy}{policy} ErforderlichRequired Der Benutzerflow, der zum Abrufen des Autorisierungscodes verwendet wurde.The user flow that was used to acquire the authorization code. Sie können in dieser Anforderung keinen anderen Benutzerflow verwenden.You cannot use a different user flow in this request.
client_idclient_id ErforderlichRequired Die Anwendungs-ID, die Ihrer App im Azure-Portal zugewiesen wird.The application ID assigned to your app in the Azure portal.
client_secretclient_secret Ja, in Web-AppsYes, in Web Apps Der geheime Schlüssel der Anwendung, der im Azure-Portal generiert wurde.The application secret that was generated in the Azure portal. Geheime Client-Schlüssel werden in diesem Flow für Web-App-Szenarien verwendet, in denen der Client einen geheimen Client-Schlüssel sicher speichern kann.Client secrets are used in this flow for Web App scenarios, where the client can securely store a client secret. Bei nativen App-Szenarien (öffentlicher Client) können geheime Clientschlüssel nicht sicher gespeichert werden, und werden daher nicht in diesem Aufruf verwendet.For Native App (public client) scenarios, client secrets cannot be securely stored, and therefore are not used in this call. Wenn Sie einen geheimen Clientschlüssel verwenden, ändern Sie ihn regelmäßig.If you use a client secret, please change it on a periodic basis.
grant_typegrant_type ErforderlichRequired Der Gewährungstyp.The type of grant. Beim Autorisierungscodefluss muss der Gewährungstyp authorization_code sein.For the authorization code flow, the grant type must be authorization_code.
scopescope EmpfohlenRecommended Eine durch Leerzeichen getrennte Liste von Bereichen.A space-separated list of scopes. Ein einzelner Bereichswert gibt Azure AD an, dass beide Berechtigungen angefordert werden.A single scope value indicates to Azure AD both of the permissions that are being requested. Mit der Verwendung der Client-ID als Bereich wird angegeben, dass für die App ein Zugriffstoken erforderlich ist, das für Ihren eigenen Dienst oder die Web-API mit derselben Client-ID verwendet werden kann.Using the client ID as the scope indicates that your app needs an access token that can be used against your own service or web API, represented by the same client ID. Der Bereich offline_access gibt an, dass Ihre App ein Aktualisierungstoken für den langfristigen Zugriff auf Ressourcen benötigt.The offline_access scope indicates that your app needs a refresh token for long-lived access to resources. Außerdem können Sie den Bereich openid verwenden, um ein ID-Token von Azure AD B2C anzufordern.You also can use the openid scope to request an ID token from Azure AD B2C.
codecode ErforderlichRequired 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_uriredirect_uri ErforderlichRequired Der Umleitungs-URI der Anwendung, bei der Sie den Autorisierungscode erhalten haben.The redirect URI of the application where you received the authorization code.
code_verifiercode_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.

Eine erfolgreiche Tokenantwort sieht wie folgt aus:A successful token response looks like this:

{
    "not_before": "1442340812",
    "token_type": "Bearer",
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
    "scope": "90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6 offline_access",
    "expires_in": "3600",
    "refresh_token": "AAQfQmvuDy8WtUv-sd0TBwWVQs1rC-Lfxa_NDkLqpg50Cxp5Dxj0VPF1mx2Z...",
}
ParameterParameter BESCHREIBUNGDescription
not_beforenot_before Der Zeitpunkt in Epochenzeit, ab dem das Token gültig ist.The time at which the token is considered valid, in epoch time.
token_typetoken_type Der Wert des Tokentyps.The token type value. Bearertoken ist der einzige Typ, den Azure AD unterstützt.The only type that Azure AD supports is Bearer.
access_tokenaccess_token Das signierte JWT-Token (JSON Web Token), das Sie angefordert haben.The signed JSON Web Token (JWT) that you requested.
scopescope Die Bereiche, für die das Token gültig ist.The scopes that the token is valid for. Sie können in den Bereichen auch Token für die spätere Verwendung zwischenspeichern.You also can use scopes to cache tokens for later use.
expires_inexpires_in Gibt an, wie lange das Token gültig ist (in Sekunden).The length of time that the token is valid (in seconds).
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 Token zusätzliche Token zu erhalten.The app can use this token to acquire additional tokens after the current token expires. Aktualisierungstoken sind langlebig.Refresh tokens are long-lived. Sie können diese verwenden, um den Zugriff auf Ressourcen für längere Zeit beizubehalten.You can use them to retain access to resources for extended periods of time. Weitere Informationen finden Sie unter Azure AD B2C-Tokenverweise.For more information, see the Azure AD B2C token reference.

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

{
    "error": "access_denied",
    "error_description": "The user revoked access to the app.",
}
ParameterParameter BESCHREIBUNGDescription
errorerror Eine Fehlercodezeichenfolge, die verwendet werden kann, um unterschiedliche Arten auftretender Fehler zu klassifizieren.An error code string that you can use to classify the types of errors that occur. Sie können mit der Zeichenfolge auch auf Fehler reagieren.You also can use the string to react to errors.
error_descriptionerror_description Eine spezifische Fehlermeldung, mit der Sie die Hauptursache eines Authentifizierungsfehlers identifizieren können.A specific error message that can help you identify the root cause of an authentication error.

3. Verwenden des Tokens3. Use the token

Nachdem Sie ein Zugriffstoken erhalten haben, können Sie das Token für Anforderungen an die Back-End-Web-APIs verwenden, indem Sie es in den -AuthorizationHeader einfügen:Now that you've successfully acquired an access token, you can use the token in requests to your back-end web APIs by including it in the Authorization header:

GET /tasks
Host: mytaskwebapi.com
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...

4. Aktualisieren des Tokens4. Refresh the token

Zugriffs- und ID-Tokens sind kurzlebig.Access tokens and ID tokens are short-lived. Nach ihrem Ablauf müssen Sie sie aktualisieren, um weiterhin auf Ressourcen zugreifen zu können.After they expire, you must refresh them to continue to access resources. Übermitteln Sie zu diesem Zweck eine andere POST-Anforderung an den /token-Endpunkt.To do this, submit another POST request to the /token endpoint. Geben Sie dieses Mal refresh_token anstelle von code an:This time, provide the refresh_token instead of the code:

POST https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/{policy}/oauth2/v2.0/token HTTP/1.1

Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token&client_id=90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6&scope=90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6 offline_access&refresh_token=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq...&redirect_uri=urn:ietf:wg:oauth:2.0:oob
ParameterParameter Erforderlich?Required? BESCHREIBUNGDescription
{tenant}{tenant} ErforderlichRequired Name des Azure AD B2C-Mandanten.Name of your Azure AD B2C tenant
{policy}{policy} ErforderlichRequired Der Benutzerflow, der zum Abrufen des ursprünglichen Aktualisierungstokens verwendet wurde.The user flow that was used to acquire the original refresh token. Sie können in dieser Anforderung keinen anderen Benutzerflow verwenden.You cannot use a different user flow in this request.
client_idclient_id ErforderlichRequired Die Anwendungs-ID, die Ihrer App im Azure-Portal zugewiesen wird.The application ID assigned to your app in the Azure portal.
client_secretclient_secret Ja, in Web-AppsYes, in Web Apps Der geheime Schlüssel der Anwendung, der im Azure-Portal generiert wurde.The application secret that was generated in the Azure portal. Geheime Client-Schlüssel werden in diesem Flow für Web-App-Szenarien verwendet, in denen der Client einen geheimen Client-Schlüssel sicher speichern kann.Client secrets are used in this flow for Web App scenarios, where the client can securely store a client secret. Bei nativen App-Szenarien (öffentlicher Client) können geheime Clientschlüssel nicht sicher gespeichert werden, und werden daher nicht in diesem Aufruf verwendet.For Native App (public client) scenarios, client secrets cannot be securely stored, and therefore are not used in this call. Wenn Sie einen geheimen Clientschlüssel verwenden, ändern Sie ihn regelmäßig.If you use a client secret, please change it on a periodic basis.
grant_typegrant_type ErforderlichRequired Der Gewährungstyp.The type of grant. Bei diesem Abschnitt des Autorisierungscodeflows muss der Gewährungstyp refresh_token sein.For this leg of the authorization code flow, the grant type must be refresh_token.
scopescope EmpfohlenRecommended Eine durch Leerzeichen getrennte Liste von Bereichen.A space-separated list of scopes. Ein einzelner Bereichswert gibt Azure AD an, dass beide Berechtigungen angefordert werden.A single scope value indicates to Azure AD both of the permissions that are being requested. Mit der Verwendung der Client-ID als Bereich wird angegeben, dass für die App ein Zugriffstoken erforderlich ist, das für Ihren eigenen Dienst oder die Web-API mit derselben Client-ID verwendet werden kann.Using the client ID as the scope indicates that your app needs an access token that can be used against your own service or web API, represented by the same client ID. Der offline_access-Bereich gibt an, dass Ihre App ein Aktualisierungstoken für den dauerhaften Zugriff auf Ressourcen benötigt.The offline_access scope indicates that your app will need a refresh token for long-lived access to resources. Außerdem können Sie den Bereich openid verwenden, um ein ID-Token von Azure AD B2C anzufordern.You also can use the openid scope to request an ID token from Azure AD B2C.
redirect_uriredirect_uri OptionalOptional Der Umleitungs-URI der Anwendung, bei der Sie den Autorisierungscode erhalten haben.The redirect URI of the application where you received the authorization code.
refresh_tokenrefresh_token ErforderlichRequired Das ursprüngliche Aktualisierungstoken, das Sie im zweiten Abschnitt des Vorgangs erhalten haben.The original refresh token that you acquired in the second leg of the flow.

Eine erfolgreiche Tokenantwort sieht wie folgt aus:A successful token response looks like this:

{
    "not_before": "1442340812",
    "token_type": "Bearer",
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
    "scope": "90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6 offline_access",
    "expires_in": "3600",
    "refresh_token": "AAQfQmvuDy8WtUv-sd0TBwWVQs1rC-Lfxa_NDkLqpg50Cxp5Dxj0VPF1mx2Z...",
}
ParameterParameter BESCHREIBUNGDescription
not_beforenot_before Der Zeitpunkt in Epochenzeit, ab dem das Token gültig ist.The time at which the token is considered valid, in epoch time.
token_typetoken_type Der Wert des Tokentyps.The token type value. Bearertoken ist der einzige Typ, den Azure AD unterstützt.The only type that Azure AD supports is Bearer.
access_tokenaccess_token Das signierte JWT-Token, das Sie angefordert haben.The signed JWT that you requested.
scopescope Die Bereiche, für die das Token gültig ist.The scopes that the token is valid for. Sie können in den Bereichen auch Tokens für die spätere Verwendung zwischenspeichern.You also can use the scopes to cache tokens for later use.
expires_inexpires_in Gibt an, wie lange das Token gültig ist (in Sekunden).The length of time that the token is valid (in seconds).
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 Token zusätzliche Token zu erhalten.The app can use this token to acquire additional tokens after the current 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 finden Sie unter Azure AD B2C-Tokenverweise.For more information, see the Azure AD B2C token reference.

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

{
    "error": "access_denied",
    "error_description": "The user revoked access to the app.",
}
ParameterParameter BESCHREIBUNGDescription
errorerror Eine Fehlercodezeichenfolge, die verwendet werden kann, um unterschiedliche Arten auftretender Fehler zu klassifizieren.An error code string that you can use to classify types of errors that occur. Sie können mit der Zeichenfolge auch auf Fehler reagieren.You also can use the string to react to errors.
error_descriptionerror_description Eine spezifische Fehlermeldung, mit der Sie die Hauptursache eines Authentifizierungsfehlers identifizieren können.A specific error message that can help you identify the root cause of an authentication error.

Verwenden Sie Ihr eigenes Azure AD B2C-Verzeichnis.Use your own Azure AD B2C directory

Führen Sie die folgenden Schritte durch, um diese Anforderungen selbst zu testen.To try these requests yourself, complete the following steps. Ersetzen Sie die in diesem Artikel verwendeten Beispielwerte durch Ihre eigenen Werte.Replace the example values we used in this article with your own values.

  1. Erstellen Sie ein Azure AD B2C-Verzeichnis.Create an Azure AD B2C directory. Verwenden Sie den Namen Ihres Verzeichnisses in den Anforderungen.Use the name of your directory in the requests.
  2. Erstellen Sie eine Anwendung zum Abrufen einer Anwendungs-ID und eines Umleitungs-URI.Create an application to obtain an application ID and a redirect URI. Sie können Ihrer App einen nativen Client hinzufügen.Include a native client in your app.
  3. Erstellen Sie Ihre Benutzerflows, um Ihre Benutzerflownamen abzurufen.Create your user flows to obtain your user flow names.