Webanmeldungen mit OpenID Connect in Azure Active Directory B2CWeb sign-in with OpenID Connect in Azure Active Directory B2C

OpenID Connect ist ein Authentifizierungsprotokoll auf Grundlage von OAuth 2.0, mit dem Benutzer sicher bei Webanwendungen angemeldet werden können.OpenID Connect is an authentication protocol, built on top of OAuth 2.0, that can be used to securely sign users in to web applications. Mithilfe der Azure Active Directory B2C (Azure AD B2C)-Implementierung von OpenID Connect können Sie die Registrierung, die Anmeldung und die sonstige Identitätsverwaltung Ihrer Webanwendungen nach Azure Active Directory (Azure AD) auslagern.By using the Azure Active Directory B2C (Azure AD B2C) implementation of OpenID Connect, you can outsource sign-up, sign-in, and other identity management experiences in your web applications to Azure Active Directory (Azure AD). In diesem Leitfaden wird dies sprachunabhängig erläutert.This guide shows you how to do so in a language-independent manner. Er beschreibt das Senden und Empfangen von HTTP-Nachrichten ohne Verwendung unserer Open Source-Bibliotheken.It describes how to send and receive HTTP messages without using any of our open-source libraries.

OpenID Connect erweitert das OAuth 2.0-Protokoll für die Autorisierung, damit es als Protokoll für die Authentifizierung verwendet werden kann.OpenID Connect extends the OAuth 2.0 authorization protocol for use as an authentication protocol. Authentifizierungsprotokoll ermöglicht Ihnen das Ausführen von SSO (Einmaliges Anmelden).This authentication protocol allows you to perform single sign-on. Dabei wird das Konzept eines ID-Tokens eingeführt, mit dem der Client die Identität des Benutzers überprüfen und grundlegende Profilinformationen über den Benutzer erhalten kann.It introduces the concept of an ID token, which allows the client to verify the identity of the user and obtain basic profile information about the user.

Da OAuth 2.0 erweitert wird, können Anwendungen zudem Zugriffstoken sicher abrufen.Because it extends OAuth 2.0, it also enables applications to securely acquire access tokens. Mit Zugriffstoken können Sie auf die Ressourcen zugreifen, die von einem Autorisierungsserver gesichert werden.You can use access tokens to access resources that are secured by an authorization server. OpenID Connect wird für Webanwendungen empfohlen, die auf einem Server gehostet werden und auf die über einen Browser zugegriffen wird.OpenID Connect is recommended if you're building a web application that's hosted on a server and accessed through a browser. Weitere Informationen zu Token finden Sie in der Übersicht über Token in Azure Active Directory B2C.For more information about tokens, see the Overview of tokens in Azure Active Directory B2C

Azure AD B2C erweitert das OpenID Connect-Standardprotokoll, sodass mehr als nur eine einfache Authentifizierung und Autorisierung erfolgt.Azure AD B2C extends the standard OpenID Connect protocol to do more than simple authentication and authorization. Der Benutzerflowparameter wird eingeführt, mit dem Sie OpenID Connect zum Hinzufügen von Benutzeroberflächen (z.B. für die Registrierung, Anmeldung und Profilverwaltung) zu Ihrer Anwendung verwenden können.It introduces the user flow parameter, which enables you to use OpenID Connect to add user experiences to your application, such as sign-up, sign-in, and profile management.

Übermitteln von AuthentifizierungsanforderungenSend authentication requests

Wenn Ihre Webanwendung den Benutzer authentifizieren und einen Benutzerflow ausführen muss, kann sie den Benutzer an den /authorize-Endpunkt weiterleiten.When your web application needs to authenticate the user and run a user flow, it can direct the user to the /authorize endpoint. Der Benutzer führt Aktionen in Abhängigkeit vom Benutzerflow durch.The user takes action depending on the user flow.

In dieser Anforderung gibt der Client die Berechtigungen, die er vom Benutzer benötigt, im Parameter scope an, und er gibt den auszuführenden Benutzerflow an.In this request, the client indicates the permissions that it needs to acquire from the user in the scope parameter, and specifies the user flow to run. Um sich anzusehen, wie diese Anforderung funktioniert, fügen Sie sie in einem Browser ein und führen sie aus.To get a feel for how the request works, try pasting the request into a browser and running it. Ersetzen Sie {tenant} durch den Namen Ihres Mandanten.Replace {tenant} with the name of your tenant. Ersetzen Sie 90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6 durch die App-ID der Anwendung, die Sie zuvor in Ihrem Mandanten registriert haben.Replace 90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6 with the app ID of the application you've previously registered in your tenant. Ändern Sie auch den Richtliniennamen ({policy}) in den Richtliniennamen in Ihrem Mandanten, z. B. b2c_1_sign_in.Also change the policy name ({policy}) to the policy name that you have in your tenant, for example b2c_1_sign_in.

GET https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/{policy}/oauth2/v2.0/authorize?
client_id=90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6
&response_type=code+id_token
&redirect_uri=https%3A%2F%2Faadb2cplayground.azurewebsites.net%2F
&response_mode=form_post
&scope=openid%20offline_access
&state=arbitrary_data_you_can_receive_in_the_response
&nonce=12345
ParameterParameter ErforderlichRequired BESCHREIBUNGDescription
{tenant}{tenant} JaYes Name des Azure AD B2C-Mandanten.Name of your Azure AD B2C tenant
{policy}{policy} JaYes 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 JaYes Die Anwendungs-ID, die das Azure-Portal Ihrer Anwendung zugewiesen hat.The application ID that the Azure portal assigned to your application.
noncenonce JaYes Ein Wert in der Anforderung, der von der Anwendung generiert wird und im resultierenden ID-Token als Anspruch enthalten ist.A value included in the request (generated by the application) that is included in the resulting ID token as a claim. Die Anwendung kann diesen Wert dann überprüfen, um die Gefahr von Token-Replay-Angriffen zu vermindern.The application can then verify this value to mitigate token replay attacks. Der Wert ist in der Regel eine zufällige, eindeutige Zeichenfolge, die verwendet werden kann, um den Ursprung der Anforderung zu identifizieren.The value is typically a randomized unique string that can be used to identify the origin of the request.
response_typeresponse_type JaYes Muss ein ID-Token für OpenID Connect enthalten.Must include an ID token for OpenID Connect. Wenn Ihre Webanwendung auch Token für den Aufruf einer Web-API benötigt, können Sie code+id_token verwenden.If your web application also needs tokens for calling a web API, you can use code+id_token.
scopescope JaYes Eine durch Leerzeichen getrennte Liste von Bereichen.A space-separated list of scopes. Der openid-Bereich gibt eine Berechtigung für das Anmelden des Benutzers und das Abrufen von Daten über den Benutzer in Form von ID-Token an.The openid scope indicates a permission to sign in the user and get data about the user in the form of ID tokens. Der offline_access-Bereich ist für Webanwendungen optional.The offline_access scope is optional for web applications. Er gibt an, dass Ihre Anwendung ein Aktualisierungstoken für den dauerhaften Zugriff auf Ressourcen benötigt.It indicates that your application will need a refresh token for extended access to resources.
promptprompt Nein No Der Typ der erforderlichen Benutzerinteraktion.The type of user interaction that's required. Zu diesem Zeitpunkt ist der einzige gültige Wert login, der den Benutzer zur Eingabe von Anmeldeinformationen für diese Anforderung zwingt.The only valid value at this time is login, which forces the user to enter their credentials on that request.
redirect_uriredirect_uri Nein No Der redirect_uri-Parameter der Anwendung, in dem Authentifizierungsantworten gesendet und von der Anwendung empfangen werden können.The redirect_uri parameter of your application, where authentication responses can be sent and received by your application. Er muss genau mit einem der redirect_uri-Parameter übereinstimmen, die Sie im Azure-Portal registriert haben, mit dem Unterschied, dass er URL-codiert sein muss.It must exactly match one of the redirect_uri parameters that you registered in the Azure portal, except that it must be URL encoded.
response_moderesponse_mode Nein No Die Methode, die zum Senden des resultierenden Autorisierungscodes zurück an Ihre Anwendung verwendet wird.The method that is used to send the resulting authorization code back to your application. Es kann sich um query, form_post, oder fragment handeln.It can be either query, form_post, or fragment. Der form_post-Antwortmodus wird empfohlen, für die optimale Sicherheit.The form_post response mode is recommended for best security.
statestate Nein No Ein in der Anforderung enthaltener Wert, der ebenfalls in der Tokenantwort zurückgegeben wird.A value included in the request that's also returned in the token response. Es kann sich um eine Zeichenfolge mit jedem beliebigen Inhalt handeln.It can be a string of any content that you want. 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 zum Codieren von Informationen über den Status des Benutzers in der Anwendung vor der Authentifizierungsanforderung verwendet, z.B. für Informationen zu der Seite, die der Benutzer besucht hat.The state is also used to encode information about the user's state in the application before the authentication request occurred, such as the page they were on.

An diesem Punkt wird der Benutzer aufgefordert, den Workflow abzuschließen.At this point, the user is asked to complete the workflow. Der Benutzer muss möglicherweise seinen Benutzernamen und sein Kennwort eingeben, sich mit einer Social-Media-Identität anmelden oder sich für das Verzeichnis registrieren.The user might have to enter their username and password, sign in with a social identity, or sign up for the directory. Je nach Definition des Benutzerflows ist eine andere Zahl von Schritten auszuführen.There could be any other number of steps depending on how the user flow is defined.

Nachdem der Benutzer den Benutzerflow abgeschlossen hat, wird im angegebenen redirect_uri-Parameter eine Antwort an die Anwendung zurückgegeben; hierbei wird die im response_mode-Parameter angegebene Methode verwendet.After the user completes the user flow, a response is returned to your application at the indicated redirect_uri parameter, by using the method that's specified in the response_mode parameter. Die Antwort ist in jedem der vorangegangenen Fälle immer gleich, unabhängig vom jeweiligen Benutzerflow.The response is the same for each of the preceding cases, independent of the user flow.

Eine erfolgreiche Antwort mit response_mode=fragment sieht wie folgt aus:A successful response using response_mode=fragment would look like:

GET https://aadb2cplayground.azurewebsites.net/#
id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...
&code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq...
&state=arbitrary_data_you_can_receive_in_the_response
ParameterParameter BESCHREIBUNGDescription
id_tokenid_token Das ID-Token, das die Anwendung angefordert hat.The ID token that the application requested. Sie können mit dem ID-Token die Identität des Benutzers überprüfen und eine Sitzung mit dem Benutzer beginnen.You can use the ID token to verify the user's identity and begin a session with the user.
codecode Der Autorisierungscode, den die Anwendung angefordert hat, wenn Sie response_type=code+id_token verwendet haben.The authorization code that the application requested, if you used response_type=code+id_token. Die Anwendung kann mit dem Autorisierungscode ein Zugriffstoken für eine Zielressource anfordern.The application can use the authorization code to request an access token for a target resource. Autorisierungscodes laufen in der Regel nach etwa zehn Minuten ab.Authorization codes typically expire after about 10 minutes.
statestate 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 Anwendung sollte überprüfen, ob die state-Werte in der Anforderung und in der Antwort identisch sind.The application should verify that the state values in the request and response are identical.

Fehlerantworten können auch an den redirect_uri-Parameter gesendet werden, damit die Anwendung diese angemessen behandeln kann:Error responses can also be sent to the redirect_uri parameter so that the application can handle them appropriately:

GET https://aadb2cplayground.azurewebsites.net/#
error=access_denied
&error_description=the+user+canceled+the+authentication
&state=arbitrary_data_you_can_receive_in_the_response
ParameterParameter BESCHREIBUNGDescription
errorerror Ein Code, mit dem die Typen der auftretenden Fehler klassifiziert werden können.A code that can be used to classify the types of errors that occur.
error_descriptionerror_description Eine spezifische Fehlermeldung, mit der Sie die Hauptursache eines Authentifizierungsfehlers identifizieren können.A specific error message that can help identify the root cause of an authentication error.
statestate 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 Anwendung sollte überprüfen, ob die state-Werte in der Anforderung und in der Antwort identisch sind.The application should verify that the state values in the request and response are identical.

Überprüfen des ID-TokensValidate the ID token

Das Empfangen eines ID-Tokens reicht nicht aus, um den Benutzer zu authentifizieren.Just receiving an ID token is not enough to authenticate the user. Validieren Sie die Signatur des ID-Tokens, und überprüfen Sie die Ansprüche im Token gemäß den Anforderungen Ihrer Anwendung.Validate the ID token's signature and verify the claims in the token per your application's requirements. Azure AD B2C verwendet JSON-Webtoken (JWT) und die Verschlüsselung mit öffentlichem Schlüssel, um Token zu signieren und deren Gültigkeit zu überprüfen.Azure AD B2C uses JSON Web Tokens (JWTs) and public key cryptography to sign tokens and verify that they are valid. Viele Open Source-Bibliotheken sind für die Überprüfung von JWTs für unterschiedliche Sprachen verfügbar.There are many open-source libraries that are available for validating JWTs, depending on your language of preference. Wir empfehlen die Verwendung einer dieser Optionen, anstatt eine eigene Validierungslogik zu implementieren.We recommend exploring those options rather than implementing your own validation logic.

Azure AD B2C verfügt über einen OpenID Connect-Metadatenendpunkt, mit dem die Anwendung zur Laufzeit Informationen über Azure AD B2C abrufen kann.Azure AD B2C has an OpenID Connect metadata endpoint, which allows an application to get information about Azure AD B2C at runtime. Diese Informationen umfassen Endpunkte, Tokeninhalte und Token-Signaturschlüssel.This information includes endpoints, token contents, and token signing keys. Es gibt ein JSON-Metadatendokument für jeden Benutzerflow in Ihrem B2C-Mandanten.There is a JSON metadata document for each user flow in your B2C tenant. Das Metadatendokument für den Benutzerflow b2c_1_sign_in in fabrikamb2c.onmicrosoft.com befindet sich beispielsweise unter:For example, the metadata document for the b2c_1_sign_in user flow in fabrikamb2c.onmicrosoft.com is located at:

https://fabrikamb2c.b2clogin.com/fabrikamb2c.onmicrosoft.com/b2c_1_sign_in/v2.0/.well-known/openid-configuration

Eine der Eigenschaften dieses Konfigurationsdokuments ist jwks_uri, deren Wert für den gleichen Benutzerflow wie folgt lautet:One of the properties of this configuration document is jwks_uri, whose value for the same user flow would be:

https://fabrikamb2c.b2clogin.com/fabrikamb2c.onmicrosoft.com/b2c_1_sign_in/discovery/v2.0/keys

Es gibt zwei Möglichkeiten zum Ermitteln, welcher Benutzerflow zum Signieren eines ID-Tokens verwendet wurde (und wo die Metadaten abgerufen werden können).To determine which user flow was used in signing an ID token (and from where to get the metadata), you have two options. Zunächst einmal ist der Benutzerflowname im acr-Anspruch im ID-Token enthalten.First, the user flow name is included in the acr claim in the ID token. Die andere Möglichkeit besteht darin, den Benutzerflow beim Übermitteln der Anforderung im Wert des Parameters state zu verschlüsseln und später zu entschlüsseln, um zu bestimmen, welcher Benutzerflow verwendet wurde.Your other option is to encode the user flow in the value of the state parameter when you issue the request, and then decode it to determine which user flow was used. Beide Methoden sind gültig.Either method is valid.

Nachdem Sie das Metadatendokument aus dem OpenID Connect-Metadatenendpunkt erhalten haben, können Sie die öffentlichen RSA-256-Schlüssel zum Überprüfen der Signatur des ID-Tokens verwenden.After you've acquired the metadata document from the OpenID Connect metadata endpoint, you can use the RSA 256 public keys to validate the signature of the ID token. Es gibt möglicherweise mehrere Schlüssel an diesem Endpunkt. Sie werden jeweils durch einen kid-Anspruch identifiziert.There might be multiple keys listed at this endpoint, each identified by a kid claim. Der Header des ID-Tokens enthält außerdem einen kid-Anspruch, der anzeigt, welcher Schlüssel zum Signieren des ID-Tokens verwendet wurde.The header of the ID token also contains a kid claim, which indicates which of these keys was used to sign the ID token.

Sie müssen den öffentlichen Schlüssel mithilfe von Exponent (e) und Modulus (n) generieren, um die Token von Azure AD B2C zu überprüfen.To verify the tokens from Azure AD B2C, you need to generate the public key using the exponent(e) and modulus(n). Sie müssen festlegen, wie dies in der jeweiligen Programmiersprache entsprechend durchzuführen ist.You need to determine how to do this in your respective programming language accordingly. Die offizielle Dokumentation zur Generierung öffentlicher Schlüssel mit dem RSA-Protokoll finden Sie hier: https://tools.ietf.org/html/rfc3447#section-3.1The official documentation on Public Key generation with the RSA protocol can be found here: https://tools.ietf.org/html/rfc3447#section-3.1

Nachdem Sie die Signatur des ID-Tokens validiert haben, müssen Sie einige Ansprüche überprüfen, z.B.:After you've validated the signature of the ID token, there are several claims that you need to verify. Beispiel:For instance:

  • Überprüfen Sie den nonce-Anspruch, um Tokenwiederholungsangriffe zu verhindern.Validate the nonce claim to prevent token replay attacks. Dessen Wert sollte dem in der Anmeldeanforderung angegebenen Wert entsprechen.Its value should be what you specified in the sign-in request.
  • Überprüfen Sie den aud-Anspruch, um sicherzustellen, dass das ID-Token für Ihre Anwendung ausgegeben wurde.Validate the aud claim to ensure that the ID token was issued for your application. Der Wert sollte der Anwendungs-ID der Anwendung entsprechen.Its value should be the application ID of your application.
  • Überprüfen Sie die Ansprüche iat und exp, um sicherzustellen, dass das ID-Token nicht abgelaufen ist.Validate the iat and exp claims to make sure that the ID token hasn't expired.

Es gibt auch einige weitere Überprüfungen, die Sie durchführen sollten.There are also several more validations that you should perform. Diese Überprüfungen werden ausführlich in der OpenID Connect Core Spec (Core-Spezifikation des OpenID Connect) beschrieben. Sie können je nach Szenario auch zusätzliche Ansprüche überprüfen.The validations are described in detail in the OpenID Connect Core Spec. You might also want to validate additional claims, depending on your scenario. Einige allgemeinen Überprüfungen umfassen:Some common validations include:

  • Sicherstellen, dass sich der Benutzer/die Organisation für die Anwendung registriert hat.Ensuring that the user/organization has signed up for the application.
  • Sicherstellen, dass der Benutzer über eine ordnungsgemäße Autorisierung und die richtigen Berechtigungen verfügt.Ensuring that the user has proper authorization/privileges.
  • Sicherstellen, dass eine bestimmte Authentifizierungsmethode verwendet wird, z. B. Azure AD Multi-Factor Authentication.Ensuring that a certain strength of authentication has occurred, such as Azure AD Multi-Factor Authentication.

Nachdem Sie das ID-Token vollständig überprüft haben, können Sie eine Sitzung mit dem Benutzer beginnen.After you validate the ID token, you can begin a session with the user. Verwenden Sie die Ansprüche im ID-Token, um Informationen über den Benutzer in Ihrer Anwendung zu erhalten.You can use the claims in the ID token to obtain information about the user in your application. Die Verwendung dieser Information umfasst die Anzeige, Datensätze und Autorisierung.Uses for this information include display, records, and authorization.

Abrufen von TokenGet a token

Wenn Ihre Webanwendung nur Benutzerflows ausführen soll, können Sie die nächsten Abschnitte überspringen.If you need your web application to only run user flows, you can skip the next few sections. Diese Abschnitte gelten nur für Webanwendungen, die authentifizierte Aufrufe an eine Web-API durchführen müssen und die auch von Azure AD B2C geschützt werden.These sections are applicable only to web applications that need to make authenticated calls to a web API and are also protected by Azure AD B2C.

Sie können den erhaltenen Autorisierungscode (mit response_type=code+id_token) für ein Token für die gewünschte Ressource einlösen, indem Sie eine POST-Anforderung an den /token-Endpunkt senden.You can redeem the authorization code that you acquired (by using response_type=code+id_token) for a token to the desired 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 APIs 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 {tenant}.onmicrosoft.com/{policy}/oauth2/v2.0/token HTTP/1.1
Host: {tenant}.b2clogin.com
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
ParameterParameter ErforderlichRequired BESCHREIBUNGDescription
{tenant}{tenant} JaYes Name des Azure AD B2C-Mandanten.Name of your Azure AD B2C tenant
{policy}{policy} JaYes 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 can't use a different user flow in this request. Fügen Sie diesen Parameter in der Abfragezeichenfolge hinzu, nicht im POST-Text.Add this parameter to the query string, not to the POST body.
client_idclient_id JaYes Die Anwendungs-ID, die das Azure-Portal Ihrer Anwendung zugewiesen hat.The application ID that the Azure portal assigned to your application.
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 Szenarios mit nativen Apps (öffentlicher Client) können geheime Clientschlüssel nicht sicher gespeichert werden, daher werden sie nicht für diesen Flow verwendet.For Native App (public client) scenarios, client secrets cannot be securely stored, therefore not used on this flow. Wenn Sie einen geheimen Client-Schlüssel verwenden, ändern Sie ihn regelmäßig.If using a client secret, please change it on a periodic basis.
codecode JaYes Der Autorisierungscode, den Sie am Anfang des Benutzerflows erhalten haben.The authorization code that you acquired in the beginning of the user flow.
grant_typegrant_type JaYes Der Berechtigungstyp, der für den Autorisierungscodefluss authorization_code lauten muss.The type of grant, which must be authorization_code for the authorization code flow.
redirect_uriredirect_uri JaYes Der redirect_uri-Parameter der Anwendung, bei der Sie den Autorisierungscode erhalten haben.The redirect_uri parameter of the application where you received the authorization code.
scopescope Nein No Eine durch Leerzeichen getrennte Liste von Bereichen.A space-separated list of scopes. Der openid-Bereich gibt eine Berechtigung für das Anmelden des Benutzers und das Abrufen von Daten über den Benutzer in Form von id_token-Parametern an.The openid scope indicates a permission to sign in the user and get data about the user in the form of id_token parameters. Damit können Sie Token an die Back-End-Web-API ihrer Anwendung übermitteln, die durch dieselbe Anwendungs-ID wie der Client dargestellt wird.It can be used to get tokens to your application's own back-end web API, which is represented by the same application ID as the client. Der offline_access-Bereich gibt an, dass Ihre Anwendung ein Aktualisierungstoken für den dauerhaften Zugriff auf Ressourcen benötigt.The offline_access scope indicates that your application needs a refresh token for extended access to resources.

Eine erfolgreiche Token-Antwort sieht wie folgt aus:A successful token response looks like:

{
    "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. Bearer ist der einzige Typ, der unterstützt wird.Bearer is the only type that is supported.
access_tokenaccess_token Das signierte JWT-Token, das Sie angefordert haben.The signed JWT token that you requested.
scopescope Die Bereiche, für die das Token gültig ist.The scopes for which the token is valid.
expires_inexpires_in Gibt an, wie lange das Zugriffstoken gültig ist (in Sekunden).The length of time that the access token is valid (in seconds).
refresh_tokenrefresh_token Ein Aktualisierungstoken von OAuth 2.0.An OAuth 2.0 refresh token. Die Anwendung kann dieses Token verwenden, um nach Ablauf des aktuellen Tokens zusätzliche Token zu erhalten.The application can use this token to acquire additional tokens after the current token expires. Mit Aktualisierungstoken kann der Zugriff auf Ressourcen für längere Zeit beibehalten werden.Refresh tokens can be used to retain access to resources for extended periods of time. Der offline_access-Bereich muss sowohl für die Autorisierung als auch in den Tokenanforderungen verwendet werden, um ein Aktualisierungstoken zu erhalten.The scope offline_access must have been used in both the authorization and token requests in order to receive a refresh token.

Fehlerantworten sehen aus wie folgt:Error responses look like:

{
    "error": "access_denied",
    "error_description": "The user revoked access to the app.",
}
ParameterParameter BESCHREIBUNGDescription
errorerror Ein Code, mit dem Typen der auftretenden Fehler klassifiziert werden können.A code that can be used to classify types of errors that occur.
error_descriptionerror_description Eine Meldung, anhand derer Sie die Hauptursache eines Authentifizierungsfehlers identifizieren können.A message that can help identify the root cause of an authentication error.

Verwenden des TokensUse 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...

Aktualisieren des TokensRefresh the token

ID-Token laufen nach kurzer Zeit ab.ID tokens expire in a short period of time. Aktualisieren Sie die Token nach deren Ablauf, um weiterhin auf Ressourcen zugreifen zu können.Refresh the tokens after they expire to continue being able to access resources. Zum Aktualisieren eines Tokens übermitteln Sie eine weitere POST-Anforderung an den /token-Endpunkt.You can refresh a token by submitting another POST request to the /token endpoint. Geben Sie diesmal den refresh_token-Parameter anstelle von code an:This time, provide the refresh_token parameter instead of the code parameter:

POST {tenant}.onmicrosoft.com/{policy}/oauth2/v2.0/token HTTP/1.1
Host: {tenant}.b2clogin.com
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token&client_id=90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6&scope=openid offline_access&refresh_token=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq...&redirect_uri=urn:ietf:wg:oauth:2.0:oob
ParameterParameter ErforderlichRequired BESCHREIBUNGDescription
{tenant}{tenant} JaYes Name des Azure AD B2C-Mandanten.Name of your Azure AD B2C tenant
{policy}{policy} JaYes 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 can't use a different user flow in this request. Fügen Sie diesen Parameter in der Abfragezeichenfolge hinzu, nicht im POST-Text.Add this parameter to the query string, not to the POST body.
client_idclient_id JaYes Die Anwendungs-ID, die das Azure-Portal Ihrer Anwendung zugewiesen hat.The application ID that the Azure portal assigned to your application.
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 Szenarios mit nativen Apps (öffentlicher Client) können geheime Clientschlüssel nicht sicher gespeichert werden, daher werden sie nicht für diesen Aufruf verwendet.For Native App (public client) scenarios, client secrets cannot be securely stored, therefore not used on this call. Wenn Sie einen geheimen Client-Schlüssel verwenden, ändern Sie ihn regelmäßig.If using a client secret, please change it on a periodic basis.
grant_typegrant_type JaYes Der Berechtigungstyp, der für diesen Teil des Autorisierungscodeflusses refresh_token lauten muss.The type of grant, which must be refresh_token for this part of the authorization code flow.
refresh_tokenrefresh_token JaYes Das ursprüngliche Aktualisierungstoken, das im zweiten Teil des Flows erhalten wurde.The original refresh token that was acquired in the second part of the flow. Der offline_access-Bereich muss sowohl für die Autorisierung als auch in den Tokenanforderungen verwendet werden, um ein Aktualisierungstoken zu erhalten.The offline_access scope must be used in both the authorization and token requests in order to receive a refresh token.
redirect_uriredirect_uri Nein No Der redirect_uri-Parameter der Anwendung, bei der Sie den Autorisierungscode erhalten haben.The redirect_uri parameter of the application where you received the authorization code.
scopescope Nein No Eine durch Leerzeichen getrennte Liste von Bereichen.A space-separated list of scopes. Der openid-Bereich gibt eine Berechtigung für das Anmelden des Benutzers und das Abrufen von Daten über den Benutzer in Form von ID-Token an.The openid scope indicates a permission to sign in the user and get data about the user in the form of ID tokens. Damit können Sie Token an die Back-End-Web-API Ihrer Anwendung senden, die durch dieselbe Anwendungs-ID wie der Client dargestellt wird.It can be used to send tokens to your application's own back-end web API, which is represented by the same application ID as the client. Der offline_access-Bereich gibt an, dass Ihre Anwendung ein Aktualisierungstoken für den dauerhaften Zugriff auf Ressourcen benötigt.The offline_access scope indicates that your application needs a refresh token for extended access to resources.

Eine erfolgreiche Token-Antwort sieht wie folgt aus:A successful token response looks like:

{
    "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. Bearer ist der einzige Typ, der unterstützt wird.Bearer is the only type that is supported.
access_tokenaccess_token Das signierte JWT-Token, das angefordert wurde.The signed JWT token that was requested.
scopescope Der Bereich, für den das Token gültig ist.The scope for which the token is valid.
expires_inexpires_in Gibt an, wie lange das Zugriffstoken gültig ist (in Sekunden).The length of time that the access token is valid (in seconds).
refresh_tokenrefresh_token Ein Aktualisierungstoken von OAuth 2.0.An OAuth 2.0 refresh token. Die Anwendung kann dieses Token verwenden, um nach Ablauf des aktuellen Tokens zusätzliche Token zu erhalten.The application can use this token to acquire additional tokens after the current token expires. Mit Aktualisierungstoken kann der Zugriff auf Ressourcen für längere Zeit beibehalten werden.Refresh tokens can be used to retain access to resources for extended periods of time.

Fehlerantworten sehen aus wie folgt:Error responses look like:

{
    "error": "access_denied",
    "error_description": "The user revoked access to the app.",
}
ParameterParameter BESCHREIBUNGDescription
errorerror Ein Code, mit dem Typen der auftretenden Fehler klassifiziert werden können.A code that can be used to classify types of errors that occur.
error_descriptionerror_description Eine Meldung, anhand derer Sie die Hauptursache eines Authentifizierungsfehlers identifizieren können.A message that can help identify the root cause of an authentication error.

Senden einer AbmeldeanforderungSend a sign-out request

Wenn Sie den Benutzer bei der Anwendung abmelden möchten, reicht es nicht aus, die Cookies der Anwendung zu löschen oder die Sitzung mit dem Benutzer auf andere Weise zu beenden.When you want to sign the user out of the application, it isn't enough to clear the application's cookies or otherwise end the session with the user. Leiten Sie den Benutzer für die Abmeldung zu Azure AD B2C um. Wenn Sie dies versäumen, kann sich der Benutzer möglicherweise erneut bei Ihrer Anwendung authentifizieren, ohne die Anmeldeinformationen erneut eingeben zu müssen.Redirect the user to Azure AD B2C to sign out. If you fail to do so, the user might be able to reauthenticate to your application without entering their credentials again. Weitere Informationen finden Sie unter Azure AD B2C-Sitzung.For more information, see Azure AD B2C session.

Um den Benutzer abzumelden, leiten Sie ihn an den end_session-Endpunkt um, der im oben beschriebenen OpenID Connect-Metadatendokument aufgeführt wird:To sign out the user, redirect the user to the end_session endpoint that is listed in the OpenID Connect metadata document described earlier:

GET https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/{policy}/oauth2/v2.0/logout?post_logout_redirect_uri=https%3A%2F%2Fjwt.ms%2F
ParameterParameter ErforderlichRequired BESCHREIBUNGDescription
{tenant}{tenant} JaYes Name des Azure AD B2C-Mandanten.Name of your Azure AD B2C tenant
{policy}{policy} JaYes Der Benutzerflow, den Sie zum Abmelden des Benutzers von der Anwendung verwenden möchten.The user flow that you want to use to sign the user out of your application.
id_token_hintid_token_hint Nein No Ein zuvor ausgestelltes ID-Token, das an den Abmelde-Endpunkt als Hinweis bezüglich der aktuellen authentifizierten Sitzung des Endbenutzers mit dem Client übergeben werden soll.A previously issued ID token to pass to the logout endpoint as a hint about the end user's current authenticated session with the client. Der id_token_hint stellt sicher, dass der post_logout_redirect_uri eine registrierte Antwort-URL in Ihren Azure AD B2C-Anwendungseinstellungen darstellt.The id_token_hint ensures that the post_logout_redirect_uri is a registered reply URL in your Azure AD B2C application settings. Weitere Informationen finden Sie unter Sichern der Umleitung beim Abmelden.For more information, see Secure your logout redirect.
client_idclient_id Nein*No* Die Anwendungs-ID, die das Azure-Portal Ihrer Anwendung zugewiesen hat.The application ID that the Azure portal assigned to your application.

*Dies ist erforderlich, wenn die Application-Isolation-SSO-Konfiguration verwendet wird und ID-Token erforderlich in der Abmeldeanforderung auf No festgelegt ist.*This is required when using Application isolation SSO configuration and Require ID Token in logout request is set to No.
post_logout_redirect_uripost_logout_redirect_uri Nein No Die URL, an die der Benutzer nach erfolgreicher Abmeldung umgeleitet werden soll. Wenn sie nicht angegeben ist, gibt Azure AD B2C eine generische Nachricht an den Benutzer aus.The URL that the user should be redirected to after successful sign out. If it isn't included, Azure AD B2C shows the user a generic message. Wenn Sie keinen id_token_hint angeben, sollten Sie diese URL nicht als Antwort-URL in Ihren Azure AD B2C-Anwendungseinstellungen registrieren.Unless you provide an id_token_hint, you should not register this URL as a reply URL in your Azure AD B2C application settings.
statestate Nein No 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 Anwendung sollte überprüfen, ob die state-Werte in der Anforderung und in der Antwort identisch sind.The application should verify that the state values in the request and response are identical.

Sichern der Umleitung beim AbmeldenSecure your logout redirect

Nach der Abmeldung wird der Benutzer an den im post_logout_redirect_uri-Parameter angegebenen URI umgeleitet, ungeachtet der Antwort-URLs, die für die Anwendung angegeben wurden.After logout, the user is redirected to the URI specified in the post_logout_redirect_uri parameter, regardless of the reply URLs that have been specified for the application. Wenn jedoch ein gültiger id_token_hint-Wert übergeben wird und die Option ID-Token in Abmeldeanforderungen erforderlich aktiviert ist, überprüft Azure AD B2C, ob der Wert von post_logout_redirect_uri einem der für die Anwendung konfigurierten Umleitungs-URIs entspricht, bevor die Umleitung ausgeführt wird.However, if a valid id_token_hint is passed, and the Require ID Token in logout requests is turned on, Azure AD B2C verifies that the value of post_logout_redirect_uri matches one of the application's configured redirect URIs before performing the redirect. Wenn keine entsprechende Antwort-URL für die Anwendung konfiguriert ist, wird eine Fehlermeldung angezeigt, und der Benutzer wird nicht umgeleitet.If no matching reply URL was configured for the application, an error message is displayed and the user is not redirected.

Informationen zum Festlegen des erforderlichen ID-Tokens in Abmeldeanforderungen finden Sie unter Konfigurieren des Sitzungsverhaltens in Azure Active Directory B2C.To set the required ID Token in logout requests, see Configure session behavior in Azure Active Directory B2C.

Nächste SchritteNext steps