Webanmeldung mit 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. Mithilfe der Azure AD B2C-Implementierung von OpenID Connect können Sie Registrierungs-, Anmeldungs- und sonstige Identitätsverwaltungsvorgänge Ihrer Webanwendungen nach Microsoft Entra ID auslagern. In diesem Leitfaden wird dies sprachunabhängig erläutert. Er beschreibt das Senden und Empfangen von HTTP-Nachrichten ohne Verwendung unserer Open Source-Bibliotheken.
Hinweis
Die meisten Open-Source-Authentifizierungsbibliotheken erwerben und validieren die JWT-Token für Ihre Anwendung. Wir empfehlen die Verwendung einer dieser Optionen, anstatt Ihren eigenen Code zu implementieren. Weitere Informationen finden Sie in der Übersicht über die Microsoft-Authentifizierungsbibliothek (MSAL) und unter Microsoft Identity Web-Authentifizierungsbibliothek.
OpenID Connect erweitert das OAuth 2.0-Protokoll für die Autorisierung, damit es als Protokoll für die Authentifizierung verwendet werden kann. Authentifizierungsprotokoll ermöglicht Ihnen das Ausführen von SSO (Einmaliges Anmelden). 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.
OpenID Connect ermöglicht es Anwendungen auch, Zugriffstoken sicher abzurufen. Mit Zugriffstoken können Sie auf die Ressourcen zugreifen, die der Autorisierungsserver sichert. OpenID Connect wird empfohlen, wenn Sie eine Webanwendung erstellen, die Sie auf einem Server hosten und auf die über einen Browser zugegriffen wird. Weitere Informationen zu Token finden Sie in der Übersicht über Token in Azure Active Directory B2C.
Azure AD B2C erweitert das OpenID Connect-Standardprotokoll, sodass mehr als nur eine einfache Authentifizierung und Autorisierung erfolgt. 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.
Übermitteln von Authentifizierungsanforderungen
Wenn Ihre Webanwendung den Benutzer authentifizieren und einen Benutzerflow ausführen muss, kann sie den Benutzer an den /authorize
-Endpunkt weiterleiten. Der Benutzer führt Aktionen in Abhängigkeit vom Benutzerflow durch.
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. Fügen Sie die Anforderung in Ihren Browser ein, und führen Sie sie aus, um ein Gefühl für die Funktionsweise der Anforderung zu bekommen. Ersetzen Sie:
{tenant}
durch den Namen Ihres Mandanten.90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6
mit der App-ID einer Anwendung, die Sie in Ihrem Mandanten registriert haben.{application-id-uri}/{scope-name}
mit dem Anwendungs-ID-URI und dem Bereich einer Anwendung, die Sie in Ihrem Mandanten registriert haben.{policy}
durch den Richtliniennamen in Ihrem Mandanten, z. B.b2c_1_sign_in
.
GET /{tenant}.onmicrosoft.com/{policy}/oauth2/v2.0/authorize?
Host: {tenant}.b2clogin.com
client_id=90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6
&response_type=code+id_token
&redirect_uri=https%3A%2F%2Fjwt.ms%2F
&response_mode=fragment
&scope=openid%20offline_access%20{application-id-uri}/{scope-name}
&state=arbitrary_data_you_can_receive_in_the_response
&nonce=12345
Parameter | Erforderlich | BESCHREIBUNG |
---|---|---|
{tenant} | Ja | Name Ihres Azure AD B2C-Mandanten Wenn Sie eine benutzerdefinierte Domäne verwenden, ersetzen Sie tenant.b2clogin.com durch Ihre Domäne, z. B. fabrikam.com . |
{policy} | Ja | Der Benutzerflow oder die Richtlinie, der bzw. die von der App ausgeführt wird. Geben Sie den Namen eines Benutzerflows an, den Sie in Ihrem Azure AD B2C-Mandanten erstellen. Beispiel: b2c_1_sign_in , b2c_1_sign_up oder b2c_1_edit_profile . |
client_id | Ja | Die Anwendungs-ID, die das Azure-Portal Ihrer Anwendung zugewiesen hat. |
nonce | Ja | Ein Wert in der Anforderung, der von der Anwendung generiert wird und im resultierenden ID-Token als Anspruch enthalten ist. Die Anwendung kann diesen Wert dann überprüfen, um die Gefahr von Token-Replay-Angriffen zu vermindern. Der Wert ist in der Regel eine zufällige, eindeutige Zeichenfolge, die verwendet werden kann, um den Ursprung der Anforderung zu identifizieren. |
response_type | Ja | Muss ein ID-Token für OpenID Connect enthalten. Wenn Ihre Webanwendung auch Token für den Aufruf einer Web-API benötigt, können Sie code+id_token verwenden. |
scope | Ja | Eine durch Leerzeichen getrennte Liste von Bereichen. 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. Der offline_access -Bereich ist für Webanwendungen optional. Er gibt an, dass Ihre Anwendung ein Aktualisierungstoken für den erweiterten Zugriff auf Ressourcen benötigt. https://{tenant-name}/{app-id-uri}/{scope} gibt eine Berechtigung für geschützte Ressourcen (etwa eine Web-API) an. Weitere Informationen finden Sie im Artikel zum Anfordern eines Zugriffstokens in Azure Active Directory B2C unter Bereiche. |
prompt | Nein | Der Typ der erforderlichen Benutzerinteraktion. Zu diesem Zeitpunkt ist der einzige gültige Wert login , der den Benutzer zur Eingabe von Anmeldeinformationen für diese Anforderung zwingt. |
redirect_uri | Ja | Der Parameter redirect_uri der Anwendung, in dem der Server Authentifizierungsantworten an Ihre Anwendung sendet. 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. |
response_mode | Nein | Die Methode, die zum Senden des resultierenden Autorisierungscodes zurück an Ihre Anwendung verwendet wird. Es kann sich um query , form_post , oder fragment handeln. Es wird empfohlen, den Antwortmodus form_post für die optimale Sicherheit zu verwenden. |
state | Nein | Ein Wert, den Sie in die Anforderung einschließen können und den der Autorisierungsserver in der Tokenantwort zurückgibt. Es kann sich um eine Zeichenfolge mit jedem beliebigen Inhalt handeln. Ein zufällig generierter eindeutiger Wert wird normalerweise verwendet, um websiteübergreifende Anforderungsfälschungsangriffe zu verhindern. 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. Wenn Sie nicht mehrere Umleitungs-URLs in Ihrem Azure-Portal registrieren möchten, können Sie den Parameter state verwenden, um Antworten in Ihrer Anwendung anhand verschiedener Anforderungen vom Azure AD B2C-Dienst zu unterscheiden. |
login_hint | Nein | Kann zum Vorabausfüllen des Felds für den Anmeldenamen auf der Anmeldeseite verwendet werden. Weitere Informationen finden Sie unter Auffüllen des Anmeldenamens. |
domain_hint | Nein | Bietet Hinweis für Azure AD B2C zu dem sozialen Netzwerk als Identitätsanbieter, das für die Anmeldung verwendet werden soll. Wenn ein gültiger Wert enthalten ist, wird der Benutzer direkt auf die Anmeldeseite des Identitätsanbieters geleitet. Weitere Informationen finden Sie unter Umleiten einer Anmeldung zu einem Anbieter sozialer Netzwerke. |
Benutzerdefinierte Parameter | Nein | Benutzerdefinierte Parameter, die mit benutzerdefinierten Richtlinien verwendet werden können. Beispiele: URI für dynamischen Seiteninhalt oder OAuth2-Schlüssel-Wert-Parameter. |
An diesem Punkt wird der Benutzer aufgefordert, den Workflow abzuschließen. 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. Je nach Definition des Benutzerflows ist eine andere Zahl von Schritten auszuführen.
Nachdem der bzw. die Benutzer*in den Benutzerflow abgeschlossen hat, wird mithilfe der im Parameter response_mode
angegebenen Methode eine Antwort über den angegebenen Parameter redirect_uri
an Ihre Anwendung zurückgegeben. Die Antwort ist in jedem der vorangegangenen Fälle immer gleich, unabhängig vom jeweiligen Benutzerflow.
Eine erfolgreiche Antwort mit response_mode=fragment
sieht wie folgt aus:
GET https://jwt.ms/#
id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...
&code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq...
&state=arbitrary_data_you_can_receive_in_the_response
Parameter | BESCHREIBUNG |
---|---|
id_token | Das ID-Token, das die Anwendung angefordert hat. Sie können mit dem ID-Token die Identität des Benutzers überprüfen und eine Sitzung mit dem Benutzer beginnen. |
code | Der Autorisierungscode, den die Anwendung angefordert hat, wenn Sie response_type=code+id_token verwendet haben. Die Anwendung kann mit dem Autorisierungscode ein Zugriffstoken für eine Zielressource anfordern. Autorisierungscodes laufen in der Regel nach etwa zehn Minuten ab. |
state | Wenn ein Parameter state in der Anforderung enthalten ist, sollte der gleiche Wert in der Antwort angezeigt werden. Die Anwendung sollte überprüfen, ob die state -Werte in der Anforderung und in der Antwort identisch sind. |
Fehlerantworten können auch an den redirect_uri
-Parameter gesendet werden, damit die Anwendung diese angemessen behandeln kann:
GET https://jwt.ms/#
error=access_denied
&error_description=AADB2C90091%3a+The+user+has+cancelled+entering+self-asserted+information.%0d%0aCorrelation+ID%3a+xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx%0d%0aTimestamp%3a+xxxx-xx-xx+xx%3a23%3a27Z%0d%0a
&state=arbitrary_data_you_can_receive_in_the_response
Parameter | BESCHREIBUNG |
---|---|
error | Ein Code, mit dem die Typen der auftretenden Fehler klassifiziert werden können. |
error_description | Eine spezifische Fehlermeldung, mit der Sie die Hauptursache eines Authentifizierungsfehlers identifizieren können. |
state | Wenn ein Parameter state in der Anforderung enthalten ist, sollte der gleiche Wert in der Antwort angezeigt werden. Die Anwendung sollte überprüfen, ob die state -Werte in der Anforderung und in der Antwort identisch sind. |
Überprüfen des ID-Tokens
Das Empfangen eines ID-Tokens reicht nicht aus, um den bzw. die Benutzer*in zu authentifizieren. Validieren Sie die Signatur des ID-Tokens, und überprüfen Sie die Ansprüche im Token gemäß den Anforderungen Ihrer Anwendung. Azure AD B2C verwendet JSON-Webtoken (JWT) und die Kryptografie mit öffentlichem Schlüssel, um Token zu signieren und deren Gültigkeit zu überprüfen.
Hinweis
Die meisten Open-Source-Authentifizierungsbibliotheken validieren die JWT-Token für Ihre Anwendung. Wir empfehlen die Verwendung einer dieser Optionen, anstatt Ihre eigene Validierungslogik zu implementieren. Weitere Informationen finden Sie in der Übersicht über die Microsoft-Authentifizierungsbibliothek (MSAL) und unter Microsoft Identity Web-Authentifizierungsbibliothek.
Azure AD B2C verfügt über einen OpenID Connect-Metadatenendpunkt, mit dem die Anwendung zur Laufzeit Informationen über Azure AD B2C abrufen kann. Diese Informationen umfassen Endpunkte, Tokeninhalte und Token-Signaturschlüssel. Für jeden Benutzerflow ist in Ihrem B2C-Mandanten ein JSON-Metadatendokument vorhanden. Das Metadatendokument für den Benutzerflow b2c_1_sign_in
in fabrikamb2c.onmicrosoft.com
befindet sich beispielsweise unter:
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:
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. Zuerst ist der Name des Benutzerflows im Anspruch acr
im ID-Token enthalten. Weitere Informationen finden Sie unter Anspruch, der den Benutzerflow darstellt. 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. Beide Methoden sind gültig.
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. Es gibt möglicherweise mehrere Schlüssel an diesem Endpunkt. Sie werden jeweils durch einen kid
-Anspruch identifiziert. Der Header des ID-Tokens enthält außerdem einen kid
-Anspruch, der anzeigt, welcher Schlüssel zum Signieren des ID-Tokens verwendet wurde.
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. Dazu müssen Sie lernen, wie Sie den öffentlichen Schlüssel in einer Programmiersprache Ihrer Wahl generieren. Die offizielle Dokumentation zur Generierung öffentlicher Schlüssel mit dem RSA-Protokoll finden Sie hier: https://tools.ietf.org/html/rfc3447#section-3.1
Nachdem Sie die Signatur des ID-Tokens validiert haben, gibt es verschiedene Ansprüche, die Sie überprüfen müssen. Beispiel:
- Überprüfen Sie den
nonce
-Anspruch, um Tokenwiederholungsangriffe zu verhindern. Dessen Wert sollte dem in der Anmeldeanforderung angegebenen Wert entsprechen. - Überprüfen Sie den
aud
-Anspruch, um sicherzustellen, dass das ID-Token für Ihre Anwendung ausgegeben wurde. Der Wert sollte der Anwendungs-ID der Anwendung entsprechen. - Überprüfen Sie die Ansprüche
iat
undexp
, um sicherzustellen, dass das ID-Token nicht abgelaufen ist.
Es gibt auch einige weitere Überprüfungen, die Sie durchführen sollten. 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 weitere Ansprüche überprüfen. Einige allgemeinen Überprüfungen umfassen:
- Sicherstellen, dass sich der bzw. die Benutzer*in/die Organisation für die Anwendung registriert hat.
- Sicherstellen, dass der bzw. die Benutzer*in über eine ordnungsgemäße Autorisierung und die richtigen Berechtigungen verfügt.
- Sicherstellen, dass eine bestimmte Authentifizierungsmethode verwendet wird, z. B. die Multi-Faktor-Authentifizierung von Microsoft Entra.
Nachdem das ID-Token validiert wurde, können Sie eine Sitzung mit dem Benutzer beginnen. Verwenden Sie die Ansprüche im ID-Token, um Informationen über den Benutzer in Ihrer Anwendung zu erhalten. Die Verwendung dieser Information umfasst die Anzeige, Datensätze und Autorisierung.
Abrufen von Token
Wenn Ihre Webanwendung nur Benutzerflows ausführen soll, können Sie die nächsten Abschnitte überspringen. Diese Abschnitte gelten nur für Webanwendungen, die authentifizierte Aufrufe an eine Web-API durchführen müssen, die von Azure AD B2C geschützt wird.
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. In Azure AD B2C können Sie Zugriffstoken für andere APIs wie gewohnt anfordern, indem Sie ihre Bereiche in der Anforderung angeben.
Sie haben auch die Möglichkeit, ein Zugriffstoken für die Back-End-Web-API Ihrer App anzufordern. In diesem Fall verwenden Sie die Client-ID der App als angeforderten Bereich. Dies führt dazu, dass ein Zugriffstoken mit dieser Client-ID als „Zielgruppe“ erstellt wird:
POST https://{tenant}.b2clogin.com/{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
Parameter | Erforderlich | BESCHREIBUNG |
---|---|---|
{tenant} | Ja | Name des Azure AD B2C-Mandanten. |
{policy} | Ja | Der Benutzerflow, der zum Abrufen des Autorisierungscodes verwendet wurde. Sie können in dieser Anforderung keinen anderen Benutzerflow verwenden. Fügen Sie diesen Parameter in der Abfragezeichenfolge hinzu, nicht im POST-Text. |
client_id | Ja | Die Anwendungs-ID, die das Azure-Portal Ihrer Anwendung zugewiesen hat. |
client_secret | Ja, in Web-Apps | Der geheime Schlüssel der Anwendung, der im Azure-Portal generiert wurde. 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. 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. Wenn Sie einen geheimen Client-Schlüssel verwenden, ändern Sie ihn regelmäßig. |
code | Ja | Der Autorisierungscode, den Sie am Anfang des Benutzerflows erhalten haben. |
grant_type | Ja | Der Berechtigungstyp, der für den Autorisierungscodefluss authorization_code lauten muss. |
redirect_uri | Nein | Der redirect_uri -Parameter der Anwendung, bei der Sie den Autorisierungscode erhalten haben. |
scope | Nein | Eine durch Leerzeichen getrennte Liste von Bereichen. 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. Damit können Sie Token an die Back-End-Web-API ihrer Anwendung übermitteln, die durch dieselbe Anwendungs-ID wie der Client dargestellt wird. Der offline_access -Bereich gibt an, dass Ihre Anwendung ein Aktualisierungstoken für den dauerhaften Zugriff auf Ressourcen benötigt. |
Eine erfolgreiche Token-Antwort sieht wie folgt aus:
{
"not_before": "1442340812",
"token_type": "Bearer",
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
"scope": "90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6 offline_access",
"expires_in": "3600",
"expires_on": "1644254945",
"refresh_token": "AAQfQmvuDy8WtUv-sd0TBwWVQs1rC-Lfxa_NDkLqpg50Cxp5Dxj0VPF1mx2Z...",
}
Parameter | BESCHREIBUNG |
---|---|
not_before | Der Zeitpunkt in Epochenzeit, ab dem das Token gültig ist. |
token_type | Der Wert des Tokentyps. Bearer ist der einzige Typ, der unterstützt wird. |
access_token | Das signierte JWT-Token, das Sie angefordert haben. |
scope | Die gültigen Bereiche für das Token. |
expires_in | Gibt an, wie lange das Zugriffstoken gültig ist (in Sekunden). |
expires_on | Der Zeitpunkt, zu dem das Zugriffstoken ungültig wird (in Epochenzeit). |
refresh_token | Ein Aktualisierungstoken von OAuth 2.0. Die Anwendung kann dieses Token verwenden, um nach Ablauf des aktuellen Tokens weitere Token zu erhalten. Mit Aktualisierungstoken kann der Zugriff auf Ressourcen für längere Zeit beibehalten werden. Der offline_access -Bereich muss sowohl für die Autorisierung als auch in den Tokenanforderungen verwendet werden, um ein Aktualisierungstoken zu erhalten. |
Fehlerantworten sehen aus wie folgt:
{
"error": "invalid_grant",
"error_description": "AADB2C90080: The provided grant has expired. Please re-authenticate and try again. Current time: xxxxxxxxxx, Grant issued time: xxxxxxxxxx, Grant expiration time: xxxxxxxxxx\r\nCorrelation ID: xxxxxxxx-xxxx-xxxX-xxxx-xxxxxxxxxxxx\r\nTimestamp: xxxx-xx-16 xx:10:52Z\r\n"
}
Parameter | BESCHREIBUNG |
---|---|
error | Ein Code, mit dem Typen der auftretenden Fehler klassifiziert werden können. |
error_description | Eine Meldung, anhand derer Sie die Hauptursache eines Authentifizierungsfehlers identifizieren können. |
Verwenden des Tokens
Nachdem Sie erfolgreich ein Zugriffstoken erhalten haben, können Sie das Token für Anforderungen an die Back-End-Web-APIs verwenden, indem Sie es in den Authorization
-Header einschließen:
GET /tasks
Host: mytaskwebapi.com
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...
Aktualisieren des Tokens
Zugriffs- und ID-Tokens sind kurzlebig. Nach ihrem Ablauf müssen Sie sie aktualisieren, um weiterhin auf Ressourcen zugreifen zu können. Wenn Sie das Zugriffstoken aktualisieren, gibt Azure AD B2C ein neues Token zurück. Das aktualisierte Zugriffstoken verfügt über die Anspruchswerte nbf
(nicht vor), iat
(ausgestellt um) und exp
(Ablauf). Alle anderen Anspruchswerte ähneln denen im vorherigen Zugriffstoken.
Zum Aktualisieren eines Tokens übermitteln Sie eine weitere POST
-Anforderung an den /token
-Endpunkt. Geben Sie diesmal den refresh_token
-Parameter anstelle von code
an:
POST https://{tenant}.b2clogin.com/{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
Parameter | Erforderlich | BESCHREIBUNG |
---|---|---|
{tenant} | Ja | Name des Azure AD B2C-Mandanten. |
{policy} | Ja | Der Benutzerflow, der zum Abrufen des ursprünglichen Aktualisierungstokens verwendet wurde. Sie können in dieser Anforderung keinen anderen Benutzerflow verwenden. Fügen Sie diesen Parameter in der Abfragezeichenfolge hinzu, nicht im POST-Text. |
client_id | Ja | Die Anwendungs-ID, die das Azure-Portal Ihrer Anwendung zugewiesen hat. |
client_secret | Ja, in Web-Apps | Der geheime Schlüssel der Anwendung, der im Azure-Portal generiert wurde. 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. 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. Wenn Sie einen geheimen Client-Schlüssel verwenden, ändern Sie ihn regelmäßig. |
grant_type | Ja | Der Berechtigungstyp, der für diesen Teil des Autorisierungscodeflusses refresh_token lauten muss. |
refresh_token | Ja | Das ursprüngliche Aktualisierungstoken, das im zweiten Teil des Flows erhalten wurde. Der offline_access -Bereich muss sowohl für die Autorisierung als auch in den Tokenanforderungen verwendet werden, um ein Aktualisierungstoken zu erhalten. |
redirect_uri | Nein | Der redirect_uri -Parameter der Anwendung, bei der Sie den Autorisierungscode erhalten haben. |
scope | Nein | Eine durch Leerzeichen getrennte Liste von Bereichen. 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. Damit können Sie Token an die Back-End-Web-API Ihrer Anwendung senden, die durch dieselbe Anwendungs-ID wie der Client dargestellt wird. Der offline_access -Bereich gibt an, dass Ihre Anwendung ein Aktualisierungstoken für den dauerhaften Zugriff auf Ressourcen benötigt. |
Eine erfolgreiche Token-Antwort sieht wie folgt aus:
{
"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...",
"refresh_token_expires_in": "1209600"
}
Parameter | BESCHREIBUNG |
---|---|
not_before | Der Zeitpunkt in Epochenzeit, ab dem das Token gültig ist. |
token_type | Der Wert des Tokentyps. Bearer ist der einzige Typ, der unterstützt wird. |
access_token | Das signierte JWT-Token, das angefordert wurde. |
scope | Die gültigen Bereiche für das Token. |
expires_in | Gibt an, wie lange das Zugriffstoken gültig ist (in Sekunden). |
refresh_token | Ein Aktualisierungstoken von OAuth 2.0. Die Anwendung kann dieses Token verwenden, um nach Ablauf des aktuellen Tokens zusätzliche Token zu erhalten. Mit Aktualisierungstoken kann der Zugriff auf Ressourcen für längere Zeit beibehalten werden. |
refresh_token_expires_in | Die Zeit, wie lange das Aktualisierungstoken gültig ist (in Sekunden) |
Fehlerantworten sehen aus wie folgt:
{
"error": "invalid_grant",
"error_description": "AADB2C90129: The provided grant has been revoked. Please reauthenticate and try again.\r\nCorrelation ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\r\nTimestamp: xxxx-xx-xx xx:xx:xxZ\r\n",
}
Parameter | BESCHREIBUNG |
---|---|
error | Ein Code, mit dem Typen der auftretenden Fehler klassifiziert werden können. |
error_description | Eine Meldung, anhand derer Sie die Hauptursache eines Authentifizierungsfehlers identifizieren können. |
Senden einer Abmeldeanforderung
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. 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. Weitere Informationen finden Sie unter Azure AD B2C-Sitzungsverhalten.
Um den Benutzer abzumelden, leiten Sie ihn an den end_session_endpoint
um, der im oben beschriebenen OpenID Connect-Metadatendokument aufgeführt wird:
GET https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/{policy}/oauth2/v2.0/logout?post_logout_redirect_uri=https%3A%2F%2Fjwt.ms%2F
Parameter | Erforderlich | BESCHREIBUNG |
---|---|---|
{tenant} | Ja | Name Ihres Azure AD B2C-Mandanten Wenn Sie eine benutzerdefinierte Domäne verwenden, ersetzen Sie tenant.b2clogin.com durch Ihre Domäne, z. B. fabrikam.com . |
{policy} | Ja | Der Benutzerflow, den Sie in der Autorisierungsanforderung angeben. Wenn sich der Benutzer beispielsweise mit dem Benutzerflow b2c_1_sign_in angemeldet hat, geben Sie b2c_1_sign_in in der Abmeldeanforderung an. |
id_token_hint | Nein | 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. Der id_token_hint stellt sicher, dass der post_logout_redirect_uri eine registrierte Antwort-URL in Ihren Azure AD B2C-Anwendungseinstellungen darstellt. Weitere Informationen finden Sie unter Sichern der Umleitung beim Abmelden. |
client_id | Nein* | Die Anwendungs-ID, die das Azure-Portal Ihrer Anwendung zugewiesen hat. *Dies ist erforderlich, wenn die Application -Isolation-SSO-Konfiguration verwendet wird und ID-Token erforderlich in der Abmeldeanforderung auf No festgelegt ist. |
post_logout_redirect_uri | Nein | 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. Sofern Sie keinen id_token_hint angeben, sollten Sie diese URL nicht als Antwort-URL in Ihren Azure AD B2C-Anwendungseinstellungen registrieren. |
state | Nein | Wenn Sie einen state -Parameter in der Autorisierungsanforderung einschließen, gibt der Autorisierungsserver denselben Wert in der Antwort an den post_logout_redirect_uri zurück. Die Anwendung sollte überprüfen, ob der state -Wert in der Anforderung und in der Antwort identisch ist. |
Bei einer Abmeldeanforderung erklärt Azure AD B2C die cookiebasierte Azure AD B2C-Sitzung für ungültig und versucht, sich von Verbundidentitätsanbietern abzumelden. Weitere Informationen finden Sie unter Einmaliges Abmelden.
Sichern der Umleitung beim Abmelden
Nach der Abmeldung wird der bzw. die Benutzer*in zu der im Parameter post_logout_redirect_uri
angegebenen URI umgeleitet, unabhängig von den Antwort-URLs, die Sie für die Anwendung angeben. 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. Wenn für die Anwendung keine entsprechende Antwort-URL konfiguriert wurde, wird eine Fehlermeldung angezeigt und der Benutzer wird nicht umgeleitet.
Informationen zum Festlegen des erforderlichen ID-Tokens in Abmeldeanforderungen finden Sie unter Konfigurieren des Sitzungsverhaltens in Azure Active Directory B2C.
Nächste Schritte
- Weitere Informationen zur Azure AD B2C-Sitzung.