OpenID Connect zum Erweitern von OAuth 2.0 verwenden
OpenID Connect erweitert das Protokoll OAuth 2.0, um eine einfache Authentifizierungs- und Identitätsschicht hinzuzufügen, die auf OAuth 2.0 aufgesetzt ist.
Verwenden Sie OpenID Connect, wenn Sie möchten, dass 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.
OAuth 2.0 stellt Sicherheitstoken für den Aufruf von Backend-Ressourcen im Namen eines Benutzers bereit. OAuth bietet eine Berechtigung oder Lizenz für den Zugriff auf Ressourcen, anstatt Informationen zur Authentifizierung selbst bereitzustellen. Die Verwendung von OAuth für die Authentifizierung ist wie ein Apartmentmanager, der jemandem, der Ihre Identität wissen möchte, einen temporären Schlüssel für Ihre Wohnung gibt. Der Schlüssel impliziert nur ein Recht, die Wohnung für eine bestimmte Zeit zu betreten. Es bedeutet nicht, dass die Person der Besitzer ist.
Mit OpenID Connect wird das Bild vervollständigt, indem Anwendungen Informationen über den Benutzer, den Kontext ihrer Authentifizierung und den Zugriff auf ihre Profilinformationen zur Verfügung gestellt werden. Mit OpenID Connect können Clients aller Typen, 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 Session des Benutzers.
UserInfo-Endpunkt: Dieser Endpunkt bietet dem Client die Möglichkeit, 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 Berechtigungstyp OAuth2, um ein OpenID Connect-ID-Token anzufordern, indem Sie den Geltungsbereich
openid
in 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 des Transports nicht manipuliert wurde.
Der folgende Anwendungsfall enthält Informationen dazu, 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 aus dem
UserInfo
-Endpunkt.
Identitätstoken
Ein Identitätstoken ist ein integritätsgesichertes, eigenständiges Token (im JWT-Format (JSON Web Token)), das im OpenID Connect-Standard definiert ist und Ansprüche über den Endbenutzer enthält. Das Identity Token ist die primäre Erweiterung, die OpenID Connect für OAuth 2.0 vornimmt, 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 auf 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 interoperabel, REST-ähnlich abrufen. Mit OpenID Connect können Clients aller Typen, einschließlich webbasierter, mobiler und JavaScript-Clients, Informationen zu authentifizierten Sessions und Endbenutzern anfordern und empfangen. Weitere Informationen finden Sie unter OpenID Connect.
Name | Value |
---|---|
amr
|
Authentifizierungsmethodenreferenzen. JSON-Array mit Zeichenfolgen, die IDs für Authentifizierungsmethoden sind, die bei der Authentifizierung verwendet werden. Beispiel: Werte können angeben, dass sowohl Passwort- als auch OTP-Authentifizierungsmethoden verwendet wurden. |
at_hash
|
OAuth 2 Zugriffstoken-Hashwert. |
aud
|
Gibt die Empfänger an, für die dieses ID-Token bestimmt ist. Muss die OAuth 2.0 client_id sein (gemäß der OpenID Connect-Spezifikation). Dies ist der OAuth-Clientname (app.name), der die Anforderung stellt. 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 AuthN-Kontext angibt. |
auth_time
|
Die Zeit (UNIX-Epochenzeit), zu der Cloud SSO den Benutzer tatsächlich authentifiziert hat (in Sekunden, die aus dem AuthN-Kontext stammen). |
azp
|
Autorisierte Partei. Die Partei, an die das ID-Token ausgegeben wurde. Falls vorhanden, MUSS sie die Client-ID OAuth 2.0 dieser Partei enthalten. Dieser Anspruch wird nur benötigt, wenn das ID-Token einen einzelnen Zielgruppenwert aufweist und diese Zielgruppe sich von der autorisierten Partei unterscheidet. Es kann auch enthalten sein, wenn die autorisierte Partei mit dem einzigen Publikum identisch ist. Der azp-Wert ist eine Zeichenfolge, bei der zwischen Groß- und Kleinschreibung unterschieden wird und die einen StringOrURI-Wert enthält. |
exp
|
Die Ablaufzeit (UNIX-Epochenzeit), nach der das ID-Token für die Verarbeitung nicht akzeptiert werden darf. Dieser Wert muss mit der session_exp. identisch sein. |
iat
|
Die Zeit (UNIX-Epochenzeit), zu der das JWT erstellt wurde (in Sekunden). UNIX Epoch Time ist eine JSON-Zahl, die die Anzahl der Sekunden von 1970-01-01T0:0:0Z darstellt, wie in der koordinierten Weltzeit (UTC) bis zum Datum/Uhrzeit gemessen. |
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 verwendet wird, um eine Clientsession mit einem ID-Token zu verknüpfen und Wiedergabeangriffe zu mildern. 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 AuthN-Kontext entsprechen). |
sid
|
Die Session-ID aus Cloud SSO (maximal 255 ASCII-Zeichen) aus dem AuthN-Kontext. |
sub
|
Gibt den Benutzer an. Die Betreff-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 für die Suche nach dem Sub im ID-Speicher. |
tok_type*
|
Identifiziert den Tokentyp: IT |
user_displayname*
|
Der Benutzeranzeigename (maximal 255 ASCII-Zeichen) aus dem AuthN-Kontext. |
user_csr*
|
Gibt an (true), dass der Benutzer ein Customer Service Representative (CSR) ist. |
user_id*
|
Die IAM-Identitätsdomain-GUID des Benutzers aus dem Kontext AuthN. |
user_lang*
|
Die bevorzugte Sprache des Benutzers. |
user_locale*
|
Das Gebietsschema des Benutzers. |
user_tenantname*
|
Der Benutzermandantenname (maximal 255 ASCII-Zeichen). Die GUID des Mandanten wird speziell nicht im Token gespeichert |
user_tz*
|
Zeitzone des Benutzers. |
Validierung des Identitätstokens
Warum validieren wir Token? Wenn Ihre Webanwendung die Zugangsdaten direkt prüft, prüft sie, ob der Benutzername und das Kennwort dem von Ihnen verwalteten entsprechen. Wenn Sie eine anspruchsbasierte Identität verwenden, geben Sie diese Stelle an einen Identitätsanbieter aus.
Die Zuständigkeit wechselt von der Prüfung von Raw-Zugangsdaten zur Prüfung, ob der Anforderer Ihren bevorzugten Identitätsprovider durchlaufen und erfolgreich authentifiziert hat. Der Identitätsprovider stellt eine erfolgreiche Authentifizierung durch Ausgabe eines Tokens dar. Bevor Sie die Informationen verwenden oder sich darauf verlassen können, dass der Benutzer authentifiziert hat, müssen Sie sie validieren.
OpenID Discovery-Dokument
Das OpenID Connect 1.0-Protokoll ist ein einfacher Identitätslayer über dem OAuth 2.0-Protokoll, der die Verwendung mehrerer Endpunkte zur Authentifizierung von Benutzern und zum Anfordern von Ressourcen erfordert, die Benutzerinformationen, Token und Public Keys enthalten. Um zu ermitteln, welche Endpunkte Sie verwenden müssen, können Sie mit OpenID Connect ein Discovery-Dokument verwenden, bei dem es sich um ein JSON-Dokument handelt, das an einem bekannten Speicherort gefunden wird. Dieses Discovery-Dokument enthält Schlüssel/Wert-Paare, die Details zur Konfiguration des OpenID Connect-Providers enthalten, einschließlich der URIs der Autorisierungs-, Token-, Benutzerinfo- und PublicKey-Endpunkte. Sie können das Discovery-Dokument für den OpenID Connect-Service der IAM-Identitätsdomain von folgender Website abrufen: https://<domainURL>/.well-known/openid-configuration.
Identitätstoken validieren
Ein Identitäts-(ID-)Token ist ein integritätsgesichertes, eigenständiges Token (im JSON Web Token-Format), das Ansprüche über den 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 ablehnen.
-
Stellen Sie sicher, dass der Wert des Zielgruppenanspruchs (
aud
) den Wertclient_id
der Anwendung enthält. Der Claimaud
(audience) 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 wenn es zusätzliche Zielgruppen enthält, denen der Client nicht vertraut. -
Stellen Sie sicher, dass die aktuelle Zeit vor der Zeit liegt, die durch den Claim für die Ablaufzeit (
exp
) dargestellt wird. -
Stellen Sie sicher, dass das ID-Token vom Aussteller ordnungsgemäß signiert wurde. Von der Identitätsdomain ausgegebene Token werden mit einem der Zertifikate signiert, die in der URI gefunden werden, die im Feld
jwks_uri
des Discovery-Dokuments angegeben ist.-
Rufen Sie das öffentliche Zertifikat des Mandanten vom Endpunkt
SigningCert/jwk
ab (Beispiel:https://acme.identity.oraclecloud.com/admin/v1/SigningCert/jwk
).Hinweis
Da Identitätsdomains Public Keys selten ändern, können Sie die Public Keys cachen und in den meisten Fällen eine lokale Validierung effizient durchführen. Dazu müssen Zertifikate abgerufen und geparst und die entsprechenden Kryptoaufrufe ausgeführt werden, um die Signatur zu prüfen: -
Verwenden Sie alle verfügbaren JWT-Librarys, um beispielsweise die Nimbus JWT Library for Java von Connect2id zu validieren. Eine Liste der verfügbaren Librarys finden Sie unter JWT.
Hinweis
Um bei einem Fehler bei der Signaturvalidierung konstante Refetches bei Angriffen mit falschen Token zu verhindern, sollte das erneute Abrufen/erneute Caching des Public Keys auf einem Zeitintervall basieren, z.B. 60 Minuten, 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(); } } }
-
-
Stellen Sie sicher, dass der Wert des Claims der Aussteller-ID (
iss
) genau mit dem Wert des Claimsiss
(Aussteller) übereinstimmt:https://<domainURL>/
UserInfo-Endpunkt 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
-
UserInfo
-Endpunkt, der einen Mechanismus zum Abrufen dieser Claims bereitstelltHinweis
Benutzeransprüche können auch im ID-Token angezeigt werden, um einen Rückruf während der Authentifizierungszeit zu vermeiden.
Benutzerprofilansprüche
Der Endpunkt UserInfo
stellt eine Gruppe von Claims basierend auf den OAuth2-Geltungsbereichen bereit, die in der Authentifizierungsanforderung dargestellt werden. OpenID Connect definiert fünf Geltungsbereichswerte, die einer bestimmten Gruppe von Standardansprüchen zugeordnet sind:
OpenID Connect-Geltungsbereich | Zurückgesendete Ansprüche |
---|---|
openid |
None (Keine) - Gibt an, dass es sich um eine OpenID Connect-Anforderung handelt |
Profil |
Name, family_name, given_name, middle_name, Kurzname, preferred_username, Profil, Bild, Website, Geschlecht, Geburtsdatum, zoneinfo, Gebietsschema, updated_at |
Adresse |
Adresse |
|
E-Mail, email_verified |
an |
phone_number, phone_number_verified |
Der Client muss seine Zugangsdaten und ein Zugriffstoken anzeigen. Das angezeigte Zugriffstoken muss den Geltungsbereich openid
enthalten.
Wenn ein Geltungsbereich ausgelassen wird (Beispiel: der Geltungsbereich email
wird nicht verwendet), ist der Anspruch (email
) in den zurückgegebenen Ansprüchen nicht vorhanden.
Beispiel für eine UserInfo-Endpunktanforderung
Nachdem die Clientanwendung einen Benutzer authentifiziert hat und das Zugriffstoken hat, kann der Client eine Anforderung an den Endpunkt UserInfo
senden, um die angeforderten Attribute für einen 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 den vom Endpunkt UserInfo
zurückgegebenen Werten vertrauen kann (z.B. als Prüfung auf Tokensubstitutionsangriff), muss der Client prüfen, ob der von der Endpunktanforderung UserInfo
zurückgegebene sub
-Claim mit dem Subject aus dem ID-Token übereinstimmt.
Autorisierungscodeablauf mit OpenID Connect verwenden
Verwenden Sie den Ablauf "Autorisierungscode", wenn Clients vorhanden sind, die ein Client Secret sicher zwischen sich und dem Autorisierungsserver verwalten können. Der Ablauf "Autorisierungscode" gibt einen Autorisierungscode an den Client zurück, der den Code dann direkt gegen ein ID-Token und ein Zugriffstoken austauschen kann.
Dies bietet Ihnen den Vorteil, dass Sie dem Benutzer-Agent (wie einem Webbrowser) und möglicherweise anderen bösartigen Anwendungen keinen Zugriff auf den Benutzer-Agent gewähren. Der Autorisierungsserver kann den Client auch authentifizieren, bevor er den Autorisierungscode für ein Zugriffstoken austauscht. Der Ablauf "Autorisierungscode" funktioniert sowohl mit vertraulichen Clients als auch mit öffentlichen Clients.
Vertrauliche Clients
Fordern Sie den Autorisierungscode an. In dieser Anforderung lautet der Parameterwert für den Geltungsbereich
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=openid
Antwortbeispiel
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+email
Diese Anforderung enthält sowohl die openid als auch einen OAuth-Ressourcengeltungsbereich:
https://<domainURL>/oauth2/v1/authorize?client_id=<client-id>&response_type=code&redirect_uri=<client-redirect-uri>&scope=http://<domainURL>/api+openid
Fordern Sie das Token an. Der Client extrahiert den Codeparameter aus der Antwort und sendet die Tokenanforderung. Außerdem stellt der Client seine Client-ID und sein Secret als Teil des Basisauthentifizierungsheaders 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 Clients
Öffentliche Clients verfügen nicht über Zugangsdaten, sondern über eine Client-ID. Der Ablauf "Autorisierungscode" umfasst zwei Schritte. Die Anforderungen umfassen eine browserbasierte GET-Anforderung und dann eine Back-Channel POST-Anforderung zum Abrufen des Zugriffstokens.
-
Fordern Sie den Autorisierungscode an.
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=1234
Antwortbeispiel
Hinweis
Diese Anforderungs- und Antwortbeispiele ähneln den zuvor besprochenen Anforderungen und Antworten des Vertraulichen Clients.https://<domainURL>/?code=AQIDBAXv9lZQ....F9NCA=
-
Fordern Sie das Token an.
Anforderungsbeispiel
Hinweis
Diese Anforderung unterscheidet sich von der Confidential Client-Anforderung, bei der die Client-ID und das Client Secret im Basisauthentifizierungsheader angegeben sind. Im öffentlichen Clientablauf ist kein Basisauthentifizierungsheader vorhanden. 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 Anwendungen zugänglich gemacht werden, die Zugriff auf den Benutzer-Agent des Benutzers haben (z. B. einen Webbrowser).
Authorization
zurückgegeben, und der Endpunkt token
wird nicht verwendet. Der Implicit-Flow 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 Implicit-Ablauf unterstützt:
-
id_token
(ID-Token) -
token
(Zugriffstoken) -
id_token token
(ID-Token und Zugriffstoken)
ID-Token abrufen
Fordern Sie das Token an.
Anforderungsbeispiel
https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=id_token&redirect_uri=<client_redirect_uri>&scope=address+openid+profile&nonce=abcdefg
Der 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
Der implizite Ablauf umfasst drei Schritte, 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
Fordern Sie das ID-Token und das Zugriffstoken an.
Anforderungsbeispielhttps://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=id_token token&redirect_uri=<client_redirect_uri>&scope=address+openid+profile&nonce=abcdefghijkl
Der 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
Hybrid Flow mit OpenID Connect verwenden
Verwenden Sie den Hybridfluss, wenn Sie Token getrennt vom Vorderkanal und dem Hinterkanal abrufen 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 Geschäfts-API-Aufrufe auszuführen.
Clients müssen sowohl browserbasierte Anforderungen und Antworten als auch programmgesteuerte/rückkanalige Anforderungen und Antworten unterstützen, um den Hybridfluss zu verwenden. Der Hybrid-Flow funktioniert sowohl mit vertraulichen Kunden als auch mit öffentlichen Kunden. 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
Fordern Sie den Autorisierungscode und das ID-Token an.
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=abcdefghijk
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>/#code=AQIDBAUrAi0l....F9NCA=&id_token=eyJ4NXQjUzI1....3R8b_Q
Die Clientanwendung verwendet den Autorisierungscode und fordert einen Backkanal 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
Der Hybridablauf umfasst vier Schritte, um den Autorisierungscode und das Zugriffstoken abzurufen:
-
Fordern Sie den Autorisierungscode und das Zugriffstoken an.
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 Backkanal 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
Fordern Sie den Autorisierungscode und das ID-Token an.
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=abcdaer
Der 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=36004
Die Clientanwendung verwendet den Autorisierungscode und fordert einen Backkanal 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.
Sie können eine Abmeldung mit OpenID Connect auf zwei Arten anfordern:
-
Wechseln Sie zu dem 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
Hier wird die Landingpage des Mandanten verwendet, die in den SSO-Einstellungen des Mandanten festgelegt wurde.Anforderungsbeispiel
https://<domainURL>/oauth2/v1/userlogout