OpenID Connect zum Erweitern von OAuth 2.0 verwenden
OpenID Connect erweitert das OAuth 2.0-Protokoll, um eine einfache Authentifizierungs- und Identitätsschicht hinzuzufügen, die auf OAuth 2.0 sitzt.
Verwenden Sie OpenID Connect, wenn Ihre cloudbasierten Anwendungen Identitätsinformationen abrufen, Details zum Authentifizierungsereignis abrufen (z.B. wann, wo und wie die Authentifizierung stattgefunden hat) und föderiertes Single Sign-On (SSO) zulassen sollen.
OAuth 2.0 stellt Sicherheitstoken bereit, die beim Aufrufen von Backend-Ressourcen für einen Benutzer verwendet werden können. OAuth bietet eine Berechtigung oder Lizenz, die auf Ressourcen zugreifen kann, anstatt Informationen zur Authentifizierung selbst bereitzustellen. Die Verwendung von OAuth für die Authentifizierung ist wie ein Apartmentmanager, der jemandem, der Ihre Identität kennen möchte, einen temporären Schlüssel zu Ihrer Wohnung gibt. Der Schlüssel impliziert nur ein Recht, die Wohnung für einen bestimmten Zeitraum zu betreten. Es bedeutet nicht, dass die Person der Besitzer ist.
Die Verwendung von OpenID Connect vervollständigt das Bild, indem Anwendungen Informationen über den Benutzer, den Kontext ihrer Authentifizierung und den Zugriff auf ihre Profilinformationen bereitstellen. Mit OpenID Connect können Clients aller Art, einschließlich webbasierter, mobiler und JavaScript-Clients, Informationen zu authentifizierten Sessions und Endbenutzern anfordern und empfangen. Weitere Informationen finden Sie unter OpenID Connect.
OpenID Connect-ID-Token: Dieses Token enthält Informationen zur authentifizierten Sitzung des Benutzers.
UserInfo-Endpunkt: Dieser Endpunkt bietet eine Möglichkeit für den Client, zusätzliche Attribute zum Benutzer abzurufen.
OpenID Connect implementieren
Für die Implementierung von OpenID Connect sind drei Hauptaktionen erforderlich:
-
OpenID Connect-ID-Token abrufen: Verwenden Sie einen OAuth2-Berechtigungstyp, um ein OpenID Connect-ID-Token anzufordern, indem Sie den Geltungsbereich
openidin die Autorisierungsanforderung aufnehmen.Die folgenden Anwendungsfälle enthalten Beispielanforderungen und Antworten zum Abrufen des ID-Tokens.
-
ID-Token validieren: Validieren Sie das ID-Token, um sicherzustellen, dass es von einem vertrauenswürdigen Aussteller stammt und dass der Inhalt während der Übertragung nicht manipuliert wurde.
Der folgende Anwendungsfall enthält Informationen darüber, wie und was validiert werden soll.
-
Profilinformationen aus dem
UserInfo-Endpunkt abrufen: Greifen Sie mit dem OAuth2-Zugriffstoken auf denUserInfo-Endpunkt zu, um Profilinformationen zum authentifizierten Benutzer abzurufen.Der folgende Anwendungsfall enthält Beispielanforderungen und Antworten zum Abrufen von Profilinformationen vom
UserInfo-Endpunkt.
Identitätstoken
Ein Identity Token ist ein integritätsgesichertes, in sich geschlossenes Token (im JSON Web Token-(JWT-)Format), das im OpenID Connect-Standard definiert ist und Claims zum Endbenutzer enthält. Das Identitätstoken ist die primäre Erweiterung, mit der OpenID Connect OAuth 2.0 aktiviert, um die Authentifizierung in einer Identitätsdomain zu aktivieren.
Das Identity Token JWT besteht aus drei Komponenten: einem Header, einer Payload und der digitalen Signatur. Nach dem JWT-Standard sind diese drei Abschnitte Base64URL codiert und durch Punkte getrennt.
OpenID Connect-Anforderungen müssen den Geltungsbereichswert
openid enthalten. OpenID Connect 1.0 ist eine einfache Identitätsschicht über dem OAuth 2.0-Protokoll. Damit kann eine IAM-Identitätsdomainclientanwendung (als OAuth 2-Client mit Client-ID und Client Secret registriert) die Identität des Endbenutzers basierend auf der von einem Autorisierungsserver (AS) ausgeführten Authentifizierung prüfen und grundlegende Profilinformationen zum Endbenutzer auf interoperable, REST-ähnliche Weise abrufen. Mit OpenID Connect können Clients aller Art, einschließlich webbasierter, mobiler und JavaScript-Clients, Informationen zu authentifizierten Sessions und Endbenutzern anfordern und empfangen. Weitere Informationen finden Sie unter OpenID Connect.
| Name | Wert |
|---|---|
amr
|
Referenzen auf Authentifizierungsmethoden. JSON-Array von Zeichenfolgen, die IDs für Authentifizierungsmethoden sind, die in der Authentifizierung verwendet werden. Beispiel: Werte können angeben, dass sowohl Kennwort- als auch OTP-Authentifizierungsmethoden verwendet wurden. |
at_hash
|
OAuth 2 Zugriffstoken-Hashwert. |
aud
|
Kennzeichnet Empfänger, für die dieses ID-Token bestimmt ist. Muss OAuth 2.0 client_id (gemäß der OpenID Connect-Spezifikation) sein. Dies ist der OAuth-Clientname (app.name), der die Anforderung ausführt. Aud enthält auch den IAM-Identitätsdomainaussteller. Dadurch wird der Tokentyp (IT) in eine Benutzer-Assertion der IAM-Identitätsdomain umgewandelt. |
authn_strength*
|
Der von Cloud SSO zurückgegebene Wert, der die Authentifizierungsstärke aus dem Kontext AuthN angibt. |
auth_time
|
Die Zeit (UNIX-Epochenzeit), zu der Cloud SSO den Benutzer tatsächlich authentifiziert hat (in Sekunden, aus AuthN Context). |
azp
|
Autorisierte Party. Die Partei, an die das ID-Token ausgegeben wurde. Er muss, sofern vorhanden, die OAuth 2.0 Client-ID dieser Vertragspartei enthalten. Dieser Anspruch ist nur erforderlich, wenn das ID-Token einen einzelnen Zielgruppenwert aufweist und sich diese Zielgruppe von der autorisierten Partei unterscheidet. Es kann einbezogen werden, auch wenn die autorisierte Partei die gleiche wie die einzige Zielgruppe ist. Der azp-Wert ist eine Zeichenfolge, die zwischen Groß- und Kleinschreibung unterschieden wird und einen StringOrURI-Wert enthält. |
exp
|
Die Ablaufzeit (UNIX-Epochenzeit), nach der das ID-Token nicht zur Verarbeitung akzeptiert werden darf. Dieser Wert muss mit dem Wert session_exp. übereinstimmen |
iat
|
Die Zeit (UNIX-Epochenzeit), zu der das JWT erstellt wurde (in Sekunden). UNIX Epoch Time ist eine JSON-Nummer, die für die Anzahl der Sekunden von 1970-01-01T0:0:0Z (gemessen in Coordinated Universal Time (UTC) bis zu Datum und Uhrzeit steht. |
iss
|
Der Principal, der das Token ausgegeben hat: https://<domainURL>
|
jti
|
Die vom Server generierte eindeutige ID für die JWT-ID. |
nonce
|
Der Zeichenfolgenwert, der zum Verknüpfen einer Clientsession mit einem ID-Token und zum Abmildern von Wiedergabeangriffen verwendet wird. Dieser Wert wird von Cloud Gate bereitgestellt. |
session_exp*
|
Die Zeit (UNIX-Epochenzeit), zu der die Cloud-SSO-Session abläuft (Sekunden, muss der Sessionablauf des SSO im Kontext AuthN sein). |
sid
|
Die Session-ID aus Cloud SSO (max. 255 ASCII-Zeichen) aus AuthN Context. |
sub
|
Ermittelt den Benutzer. Die Subject-ID ist lokal eindeutig, wird nie neu zugewiesen und soll vom Client verwendet werden: Benutzeranmelde-ID (maximal 255 ASCII-Zeichen). Dies ist die Anmelde-ID des Benutzers aus dem Kontext AuthN. |
sub_mappingattr*
|
Das Attribut, mit dem das Sub im ID-Speicher gesucht wird. |
tok_type*
|
Identifiziert den Tokentyp: IT |
user_displayname*
|
Der Benutzeranzeigename (max. 255 ASCII-Zeichen) aus dem Kontext AuthN. |
user_csr*
|
Gibt an (wahr), dass der Benutzer ein Kundendienstmitarbeiter (CSR) ist. |
user_id*
|
Die IAM-Identitätsdomain-GUID des Benutzers aus dem Kontext AuthN. |
user_lang*
|
Die bevorzugte Sprache des Nutzers. |
user_locale*
|
Das Gebietsschema des Benutzers. |
user_tenantname*
|
Der Name des Benutzermandanten (max. 255 ASCII-Zeichen). Mandanten-GUID wird speziell nicht im Token gespeichert |
user_tz*
|
Zeitzone des Benutzers. |
Identitäts-Tokenvalidierung
Warum validieren wir Token? Wenn Ihre Webanwendung die Zugangsdaten direkt prüft, prüft sie, ob der angezeigte Benutzername und das angezeigte Kennwort den von Ihnen verwalteten Daten entsprechen. Wenn Sie eine beanspruchungsbasierte Identität verwenden, müssen Sie diesen Job an einen Identitätsprovider auslagern.
Die Verantwortung verlagert sich von der Überprüfung von Rohdaten auf die Überprüfung, ob der Anforderer Ihren bevorzugten Identitätsprovider durchlaufen und erfolgreich authentifiziert hat. Der Identitätsprovider stellt eine erfolgreiche Authentifizierung dar, indem ein Token ausgegeben wird. Bevor Sie die Informationen verwenden oder sich darauf als Assertion verlassen können, die der Benutzer authentifiziert hat, müssen Sie sie validieren.
OpenID Discovery-Dokument
Das OpenID Connect 1.0-Protokoll ist eine einfache Identitätsschicht über dem OAuth 2.0-Protokoll, für die mehrere Endpunkte zur Authentifizierung von Benutzern und zum Anfordern von Ressourcen erforderlich sind, die Benutzerinformationen, Token und PublicKeys enthalten. Um herauszufinden, welche Endpunkte Sie verwenden müssen, können Sie mit OpenID Connect ein Discovery-Dokument verwenden, das ein JSON-Dokument an einem bekannten Speicherort ist. Dieses Discovery-Dokument enthält Schlüssel/Wert-Paare, die Details zur Konfiguration des OpenID Connect-Providers bereitstellen, einschließlich der URIs der Autorisierungs-, Token-, Benutzerinfo- und Public-Keysendpunkte. Sie können das Discovery-Dokument für den OpenID Connect-Service der IAM-Identitätsdomain abrufen: https://<domainURL>/.well-known/openid-configuration.
Identitätstoken validieren
Ein Identity-(ID-)Token ist ein integritätsgesichertes, in sich geschlossenes Token (im JSON Web Token-Format), das Claims zum Endbenutzer enthält. Es stellt die Session eines authentifizierten Benutzers dar. Daher muss das Token validiert werden, bevor eine Anwendung dem Inhalt des ID-Tokens vertrauen kann. Beispiel: Wenn ein böswilliger Angreifer das ID-Token eines Benutzers wiedergab, das er zuvor erfasst hatte, sollte die Anwendung erkennen, dass das Token wiedergegeben wurde oder verwendet wurde, nachdem es abgelaufen war, und die Authentifizierung verweigern.
-
Stellen Sie sicher, dass der Wert des Zielgruppenanspruchs (
aud) den Wertclient_idder Anwendung enthält. Der Claimaud(Zielgruppe) kann ein Array mit mehreren Elementen enthalten. Das ID-Token muss abgelehnt werden, wenn das ID-Token den Client nicht als gültige Zielgruppe auflistet oder zusätzliche Zielgruppen enthält, die vom Client nicht vertrauenswürdig sind. -
Prüfen Sie, ob die aktuelle Zeit vor der Zeit liegt, die durch den Ablaufzeitanspruch (
exp) dargestellt wird. -
Überprüfen Sie, ob das ID-Token ordnungsgemäß vom Aussteller signiert wurde. Von der Identitätsdomain ausgegebene Token werden mit einem der Zertifikate signiert, die sich in der URI befinden, die im Feld
jwks_urides Discovery-Dokuments angegeben ist.-
Rufen Sie das öffentliche Zertifikat des Mandanten vom
SigningCert/jwk-Endpunkt ab (Beispiel:https://acme.identity.oraclecloud.com/admin/v1/SigningCert/jwk).Hinweis
Da Identitätsdomains PublicKeys selten ändern, können Sie die PublicKeys cachen und in den meisten Fällen die lokale Validierung effizient ausführen. Dazu müssen Zertifikate abgerufen und geparst und die entsprechenden Kryptoaufrufe getätigt werden, um die Signatur zu prüfen: -
Verwenden Sie beliebige verfügbare JWT-Librarys, um beispielsweise die Nimbus JWT Library von Connect2id für Java zu validieren. Eine Liste der verfügbaren Librarys finden Sie unter JWT.
Hinweis
Im Falle eines Fehlers bei der Signaturvalidierung muss das erneute Abrufen/Erneut Zwischenspeichern des Public Keys auf einem Zeitintervall (z. B. 60 Minuten) basieren, damit bei Angriffen mit gefälschten Token konstante Refetches verhindert werden, sodass Refetches nur alle 60 Minuten erfolgen.
Beispiel
package sample; import java.net.MalformedURLException; import java.net.URL; import com.nimbusds.jose.JWSAlgorithm; import com.nimbusds.jose.jwk.source.JWKSource; import com.nimbusds.jose.jwk.source.RemoteJWKSet; import com.nimbusds.jose.proc.JWSKeySelector; import com.nimbusds.jose.proc.JWSVerificationKeySelector; import com.nimbusds.jose.proc.SecurityContext; import com.nimbusds.jwt.JWTClaimsSet; import com.nimbusds.jwt.proc.ConfigurableJWTProcessor; import com.nimbusds.jwt.proc.DefaultJWTProcessor; public class TokenValidation { public static void main(String[] args) { try { String tokenValue = "eyJ4NXQjUzI1....W9J4oQ"; ConfigurableJWTProcessor jwtProcessor = new DefaultJWTProcessor(); // change t JWKSource keySource = new RemoteJWKSet(new URL("https://<domainURL>/admin/v1/SigningCert/jwk")); // The expected JWS algorithm of the token (agreed out-of-band) JWSAlgorithm expectedJWSAlg = JWSAlgorithm.RS256; // Configure the JWT processor with a key selector to feed matching public // RSA keys sourced from the JWK set URL JWSKeySelector keySelector = new JWSVerificationKeySelector(expectedJWSAlg, keySource); jwtProcessor.setJWSKeySelector(keySelector); // Process the token SecurityContext ctx = null; // optional context parameter, not required here JWTClaimsSet claimsSet = jwtProcessor.process(tokenValue, ctx); // Print out the token claims set System.out.println(claimsSet.toJSONObject()); } catch (Exception e) { e.printStackTrace(); } } } -
-
Prüfen Sie, ob der Wert des Issuer Identifier-(
iss-)Claims genau mit dem Wert desiss-(Emittenten-)Claims übereinstimmt:https://<domainURL>/
Endpunkt UserInfo abfragen
Der OpenID Connect-Endpunkt UserInfo wird von einer Anwendung verwendet, um Profilinformationen zur Identität abzurufen, die authentifiziert wurde. Anwendungen können diesen Endpunkt verwenden, um Profilinformationen, Voreinstellungen und andere benutzerspezifische Informationen abzurufen.
Das OpenID Connect-Profil besteht aus zwei Komponenten:
-
Ansprüche, die den Benutzer beschreiben
-
Endpunkt
UserInfo, der einen Mechanismus zum Abrufen dieser Claims bereitstelltHinweis
Benutzeransprüche können auch im ID-Token angezeigt werden, um einen Callback während der Authentifizierungszeit zu vermeiden.
Benutzerprofilansprüche
Der UserInfo-Endpunkt stellt eine Gruppe von Claims bereit, die auf den OAuth2-Geltungsbereichen basieren, die in der Authentifizierungsanforderung angezeigt werden. OpenID Connect definiert fünf Geltungsbereichswerte, die einem bestimmten Set von Standardansprüchen zugeordnet sind:
| OpenID Connect-Geltungsbereich | Zurückgesendete Ansprüche |
|---|---|
|
openid |
Keine - Gibt an, dass es sich um eine OpenID Connect-Anforderung handelt |
|
Informationen zu Arbeitsbereichen |
Name, family_name, given_name, middle_name, Spitzname, preferred_username, Profil, Bild, Website, Geschlecht, Geburtsdatum, zoneinfo, Gebietsschema, updated_at |
|
Adresse |
Adresse |
|
|
E-Mail, email_verified |
|
phone |
phone_number, phone_number_verified |
Der Client muss seine Zugangsdaten und ein Zugriffstoken bereitstellen. Das dargestellte Zugriffstoken muss den Geltungsbereich openid enthalten.
Wenn ein Geltungsbereich ausgelassen wird (Beispiel: der Geltungsbereich email wird nicht verwendet), wird der Anspruch (email) nicht in den zurückgegebenen Ansprüchen vorhanden sein.
Beispiel für eine UserInfo-Endpunktanforderung
Nachdem die Clientanwendung einen Benutzer authentifiziert hat und das Zugriffstoken aufweist, kann der Client dann eine Anforderung an den Endpunkt UserInfo senden, um die angeforderten Attribute zu einem Benutzer abzurufen. Das folgende Beispiel zeigt ein Anforderungsbeispiel.
curl -i
-H 'Content-Type: application/x-www-form-urlencoded'
-H 'Authorization: Bearer eyJ4NXQjUzI1....rtApFw'-H 'Accept: */*'
-H 'Content_Language: en-US'--request GET https://<domainURL>/oauth2/v1/userinfo
Antwortbeispiel
Eine erfolgreiche Antwort gibt eine HTTP 200-OK-Antwort und die Claims des Benutzers im JSON-Format zurück:
{
"birthdate":"",
"email":"user@example.com",
"email_verified":false,
"family_name":"user",
"gender":"",
"given_name":"user",
"appRoles":[],
"name":"alice alice",
"preferred_username":"user@example.com",
"sub":"user@example.com",
"updated_at":1495136783,"website":""
}
Bevor die Clientanwendung die vom UserInfo-Endpunkt zurückgegebenen Werte vertrauen kann (z.B. als Prüfung auf Tokensubstitutionsangriffe), muss der Client prüfen, ob der von der UserInfo-Endpunktanforderung zurückgegebene sub-Claim mit dem Subjekt aus dem ID-Token übereinstimmt.
Autorisierungscodeablauf mit OpenID Connect verwenden
Verwenden Sie den Autorisierungscodefluss, wenn Sie Clients haben, die ein Client Secret zwischen sich und dem Autorisierungsserver sicher verwalten können. Der Autorisierungscodeablauf gibt einen Autorisierungscode an den Client zurück, der den Code dann direkt gegen ein ID-Token und ein Zugriffstoken austauschen kann.
Dadurch erhalten Sie den Vorteil, dass Sie dem Benutzer-Agent (z. B. einem Webbrowser) und möglicherweise anderen bösartigen Anwendungen keinen Zugriff auf den Benutzer-Agent geben. Der Autorisierungsserver kann den Client auch authentifizieren, bevor er den Autorisierungscode gegen ein Zugriffstoken austauscht. Der Autorisierungscodeablauf funktioniert sowohl mit vertraulichen Clients als auch mit öffentlichen Clients.
Vertrauliche Kunden
Autorisierungscode anfordern. In dieser Anforderung lautet der Geltungsbereichsparameterwert
openid.Dies ist ein OpenID Connect-Spezifikationswert.Anforderungsbeispiel
https://<domainURL>/oauth2/v1/authorize?client_id=<client-id>&response_type=code&redirect_uri=<client-redirect-uri>&scope=openidAntwortbeispiel
https://<domainURL>/?code=AQIDBAXv9lZQ....F9NCA=Sie können zusätzliche Geltungsbereichswerte in Ihren Anforderungen angeben. Beispiel:
https://<domainURL>/oauth2/v1/authorize?client_id=<client-id>&response_type=code&redirect_uri=<client-redirect-uri>&scope=phone+openid+offline_access+profile+address+emailDiese Anforderung enthält sowohl den OpenID- als auch den Ressourcengeltungsbereich OAuth:
https://<domainURL>/oauth2/v1/authorize?client_id=<client-id>&response_type=code&redirect_uri=<client-redirect-uri>&scope=http://<domainURL>/api+openid
Das Token anfordern. Der Client extrahiert den Codeparameter aus der Antwort und macht die Tokenanforderung. Darüber hinaus stellt der Client seine Client-ID und sein Secret als Teil des Basic Authentication-Headers bereit.
Anforderungsbeispiel
curl -i -H 'Authorization: Basic ZWE1OGIwNDA0N2ZkNGQ4MTgyYThiYWQ0ZTNkMGFmZjU6ZGMxNGE4MjMtZGU2OC00YWNhLTg1OWUtMWNhZTJmNjQ0NTBi' -H 'Accept: */*' --request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=authorization_code&code=AQIDBAXv9lZQ???.jF9NCA'Antwortbeispiel
Die Anforderung enthält sowohl das Zugriffstoken als auch das ID-Token.
{ "access_token":"eyJ4NXQjUzI1???.xhtnbw", "token_type":"Bearer", "expires_in":27261, "id_token":"eyJ4NXQjUzI1???.._XLqUw" }
Öffentliche Kunden
Öffentliche Clients haben keine Zugangsdaten, sondern eine Client-ID. Der Autorisierungscodeablauf umfasst zwei Schritte. Die Anforderungen umfassen eine browserbasierte GET-Anforderung und dann eine Back-Channel-POST-Anforderung zum Abrufen des Zugriffstokens.
-
Autorisierungscode anfordern.
Anforderungsbeispiel
GET https://<domainURL>/oauth2/v1/authorize?client_id=<client-id>&response_type=code&redirect_uri=<client-redirect-uri>&scope=openid&nonce=<nonce-value>&state=1234Antwortbeispiel
Hinweis
Diese Beispiele für Anfragen und Antworten sind vergleichbar mit den zuvor besprochenen Anfragen und Antworten des vertraulichen Auftraggebers.https://<domainURL>/?code=AQIDBAXv9lZQ....F9NCA= -
Das Token anfordern.
Anforderungsbeispiel
Hinweis
Diese Anforderung unterscheidet sich von der Anforderung des vertraulichen Clients, bei der die Client-ID und das Client Secret im Header der Basisauthentifizierung angegeben sind. Im öffentlichen Clientfluss gibt es keinen Basisauthentifizierungsheader. Die Client-ID wird als Teil der Anforderungs-Payload angegeben.curl -i -H 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8' --request POST https://<domainURL>/oauth2/v1/token -d 'grant_type=authorization_code&code=<authz-code>&reidrect_uri=<client-redirect-uri>&client_id=<client-id>'Antwortbeispiel
{ "access_token":"eyJ4NXQjUzI1???.xhtnbw", "token_type":"Bearer", "expires_in":27261, "id_token":"eyJ4NXQjUzI1???.._XLqUw" }
Impliziten Ablauf mit OpenID Connect verwenden
Verwenden Sie den impliziten Ablauf, wenn Sie einen browserbasierten Client mit einer Skriptsprache wie JavaScript implementiert haben. Das Zugriffstoken und das ID-Token werden direkt an den Client zurückgegeben. Dadurch können diese Token dem Benutzer und den Anwendungen bereitgestellt werden, die Zugriff auf den Benutzer-Agent des Benutzers (z. B. einen Webbrowser) haben.
Authorization-Endpunkt zurückgegeben, und der token-Endpunkt wird nicht verwendet. Der implizite Ablauf funktioniert mit vertraulichen, vertrauenswürdigen und öffentlichen Clients.Öffentliche Clients verfügen nicht über Zugangsdaten, sondern nur über eine Client-ID.
Die folgenden response_type-Werte werden mit dem impliziten Ablauf unterstützt:
-
id_token(ID-Token) -
token(Zugriffstoken) -
id_token token(sowohl ID-Token als auch Zugriffstoken)
ID-Token abrufen
Das Token anfordern.
Anforderungsbeispiel
https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=id_token&redirect_uri=<client_redirect_uri>&scope=address+openid+profile&nonce=abcdefgDer Benutzer meldet sich an und erteilt seine Zustimmung (basierend auf den angeforderten Geltungsbereichen)
Antwort mit ID-Token
Antwortbeispiel
Hinweis
Alle Antwortparameter werden der Fragmentkomponente der Umleitungs-URI hinzugefügt.https://<domainURL>/#id_token=eyJ4NXQjUzI1.....gF5uyQ
Zugriffstoken abrufen
Impliziten Ablauf werden drei Schritte ausgeführt, um ein Zugriffstoken abzurufen:
-
Fordern Sie das Zugriffstoken an.
Anforderungsbeispiel
https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=token&redirect_uri=<client_redirect_uri>&scope=address+openid+profile -
Der Benutzer meldet sich an und erteilt seine Zustimmung (basierend auf den angeforderten Geltungsbereichen).
-
Antwort mit Zugriffstoken
Antwortbeispiel
Hinweis
Alle Antwortparameter werden der Fragmentkomponente der Umleitungs-URI hinzugefügt.https://<domainURL>/#access_token=eyJ4NXQjUzI1...4WGvJQ&token_type=Bearer&expires_in=3600
ID-Token und Zugriffstoken abrufen
ID-Token und Zugriffstoken anfordern.
Anforderungsbeispielhttps://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=id_token token&redirect_uri=<client_redirect_uri>&scope=address+openid+profile&nonce=abcdefghijklDer Benutzer meldet sich an und erteilt seine Zustimmung (basierend auf den angeforderten Geltungsbereichen).
Antwort mit Zugriffstoken und ID-Token.
AntwortbeispielHinweis
Alle Antwortparameter werden der Fragmentkomponente der Umleitungs-URI hinzugefügt.https://<domainURL>/#access_token=eyJ4NXQjUzI....XWGmeQ&id_token=eyJ4NXQjUzI1....&token_type=Bearer&expires_in=3600
Hybridfluss mit OpenID Connect verwenden
Verwenden Sie den Hybridfluss, wenn Sie Token getrennt vom Frontkanal und vom Rückkanal erhalten möchten. Beispiel: Sie haben eine Browserkomponente wie JavaScript und eine Backend-Serverkomponente wie Node.js. Die Browserkomponente ruft den Autorisierungscode und das ID-Token ab und kann dann den UI-Inhalt personalisieren. Die Backend-Komponente ruft das Zugriffstoken ab, um Business-API-Aufrufe auszuführen.
Clients müssen sowohl browserbasierte Anforderungen und Antworten als auch programmatische/Back-Channel-Anforderungen und -Antworten unterstützen, um den Hybrid-Ablauf zu verwenden. Der Hybridfluss funktioniert sowohl mit vertraulichen Clients als auch mit öffentlichen Clients. Die folgenden response_type-Werte werden mit dem Hybridfluss unterstützt:
-
code id_token(ID-Token) -
code token(Zugriffstoken) -
code id_token token(Autorisierungscode, ID-Token und Zugriffstoken)
ID-Token abrufen
Autorisierungscode und ID-Token anfordern.
Anforderungsbeispiel
https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=code id_token&redirect_uri=<client_redirect_uri>&scope=http://<domainURL>/test+openid+offline_access&nonce=abcdefghijkDer Benutzer meldet sich an und erteilt seine Zustimmung (basierend auf den angeforderten Geltungsbereichen).
Antwort mit ID-Token und Autorisierungscode.
Antwortbeispiel
Hinweis
Alle Antwortparameter werden der Fragmentkomponente der Umleitungs-URI hinzugefügt.https://<domainURL>/#code=AQIDBAUrAi0l....F9NCA=&id_token=eyJ4NXQjUzI1....3R8b_QDie Clientanwendung verwendet den Autorisierungscode und fordert einen Back-Channel an, um ein neues Zugriffstoken und Aktualisierungstoken abzurufen.
Anforderungsbeispiel
curl -i -H 'Authorization: Basic YjA3NTZkNDc5M2QwNDZjNjhjZWVmY2UxZjE4ZGUwMWM6NGYzZjJjN2EtZTBjZC00NzcyLWE5MTYtNjI3ZmExNzA2NWE5' -H 'Accept: */*' --request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=authorization_code&code=AQIDBAUrAi0l???.CA%3D'Antwortbeispiel
{ "access_token":"eyJ4NXQjUzI1....sJ5mCw", "token_type":"Bearer", "expires_in":3600, "refresh_token":"AQIDBAUwxxoC....tZLvA" }
Zugriffstoken abrufen
Im Hybridfluss werden der Autorisierungscode und das Zugriffstoken in vier Schritten abgerufen:
-
Autorisierungscode und Zugriffstoken anfordern.
Anforderungsbeispiel
https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=code token&redirect_uri=<client_redirect_uri>&scope=http://<domainURL>/test -
Der Benutzer meldet sich an und erteilt seine Zustimmung (basierend auf den angeforderten Geltungsbereichen).
-
Antwort mit ID-Token und Autorisierungscode.
Antwortbeispiel
Hinweis
Alle Antwortparameter werden der Fragmentkomponente der Umleitungs-URI hinzugefügt.https://<domainURL>/#access_token=eyJ4NXQjUzI1....Pudw9A&code=AQIDBAU6d6Ae....F9NCA=&token_type=Bearer&expires_in=3600 -
Die Clientanwendung verwendet den Autorisierungscode und fordert einen Back-Channel an, um ein neues Zugriffstoken abzurufen.
Anforderungsbeispielcurl -i -H 'Authorization: Basic YjA3NTZkNDc5M2QwNDZjNjhjZWVmY2UxZjE4ZGUwMWM6NGYzZjJjN2EtZTBjZC00NzcyLWE5MTYtNjI3ZmExNzA2NWE5' -H 'Accept: */*'' --request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=authorization_code&code=AQIDBAU6d6Ae...NCA%3D'Antwortbeispiel
{ "access_token":"eyJ4NXQjUzI1....Tgs9LA", "token_type":"Bearer", "expires_in":3600 }
ID-Token und Zugriffstoken abrufen
Autorisierungscode und ID-Token anfordern.
Anforderungsbeispielhttps://<domainURL>/oauth2/v1/authorize?client_id=client_id&response_type=cod id_token token&redirect_uri=client_redirect_uri&scope=http://<domainURL>/test+openid&nonce=abcdaerDer Benutzer meldet sich an und erteilt seine Zustimmung (basierend auf den angeforderten Geltungsbereichen).
Antwort mit ID-Token und Zugriffstoken.
AntwortbeispielHinweis
Alle Antwortparameter werden der Fragmentkomponente der Umleitungs-URI hinzugefügt.https://<domainURL>/#access_token=eyJ4NXQjUzI1....sDB7lA&code=AQIDBAVxZzy-....F9NCA=&id_token=eyJ4NXQjUzI1....&token_type=Bearer&expires_in=36004Die Clientanwendung verwendet den Autorisierungscode und fordert einen Back-Channel an, um ein neues Zugriffstoken abzurufen.
Anforderungsbeispielcurl -i -H 'Authorization: Basic YjA3NTZkNDc5M2QwNDZjNjhjZWVmY2UxZjE4ZGUwMWM6NGYzZjJjN2EtZTBjZC00NzcyLWE5MTYtNjI3ZmExNzA2NWE5' -H 'Accept: */*' ?request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=authorization_code&code=AQIDBAXUbLmS???.NCA%3D'Antwortbeispiel
{ "access_token":"eyJ4NXQjUzI1....g52XmQ", "token_type":"Bearer", "expires_in":3600, "id_token":"eyJ4NXQjUzI1....f6JfWA" }
OpenID Connect zur Abmeldung verwenden
Sie können OpenID Connect für browserbasierte Abmeldeanforderungen verwenden.
Es gibt zwei Möglichkeiten, eine Abmeldung mit OpenID Connect anzufordern:
-
Umleiten Sie an den Client, der die Abmeldung initiiert hat.
Hinweis
Stellen Sie sicher, dass Sie die Umleitungs-URI nach der Abmeldung für die OAuth-Clientanwendung definieren und dass das ID-Token in der Anforderung gesendet wird. Das ID-Token enthält die Client-ID. Die entsprechende Post-Logout-URL dieser Client-ID wird abgerufen und validiert.Anforderungsbeispiel
https://<domainURL>/oauth2/v1/userlogout?post_logout_redirect_uri=http://clienthost:port/myapp/return&state=c3004d28&id_token_hint=<IDToken> -
Verwenden Sie die Landingpage des Mandanten.
Hinweis
Dabei wird die Landingpage des Mandanten verwendet, die in den SSO-Einstellungen des Mandanten festgelegt wurde.Anforderungsbeispiel
https://<domainURL>/oauth2/v1/userlogout