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.

Zwei Konzepte werden vorgestellt:
  • 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:

  1. OpenID Connect-ID-Token abrufen: Verwenden Sie einen OAuth2-Berechtigungstyp, 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.

  2. 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.

  3. Profilinformationen aus dem UserInfo-Endpunkt abrufen: Greifen Sie mit dem OAuth2-Zugriffstoken auf den UserInfo-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.

Hinweis

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.

Das ID-Token wird im OpenID Connect-Standard definiert und ist die primäre Erweiterung, die OpenID Connect für OAuth 2.0 ausführt, um die Authentifizierung zu aktivieren. ID-Token sind sensibel und können beim Abfangen missbraucht werden. Stellen Sie sicher, dass diese Token sicher behandelt werden, indem Sie sie nur über HTTPS und nur mit POST-Daten oder innerhalb von Anforderungsheadern übertragen. Wenn Sie sie auf Ihrem Server speichern, müssen Sie sie auch sicher speichern.
  1. Stellen Sie sicher, dass der Wert des Zielgruppenanspruchs (aud) den Wert client_id der Anwendung enthält. Der Claim aud (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.

  2. Prüfen Sie, ob die aktuelle Zeit vor der Zeit liegt, die durch den Ablaufzeitanspruch (exp) dargestellt wird.

  3. Ü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_uri des 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();
            }
        }
     
    }
  4. Prüfen Sie, ob der Wert des Issuer Identifier-(iss-)Claims genau mit dem Wert des iss-(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 bereitstellt
    Hinweis

    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

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

Der Autorisierungscodeablauf umfasst zwei Schritte:
  1. 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=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 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
  2. 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.

  1. 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=1234

    Antwortbeispiel

    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=
  2. 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.

An diesem Ablauf ist keine programmgesteuerte/Backchannel-Tokenanforderung beteiligt (wie die öffentliche Clientanforderung im Beispiel für den Autorisierungscodeablauf). Alle Token werden vom Authorization-Endpunkt zurückgegeben, und der token-Endpunkt wird nicht verwendet. Der implizite Ablauf funktioniert mit vertraulichen, vertrauenswürdigen und öffentlichen Clients.
Hinweis

Ö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

Im impliziten Ablauf werden drei Schritte ausgeführt, um ein ID-Token zu erhalten:
  1. 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=abcdefg
  2. Der Benutzer meldet sich an und erteilt seine Zustimmung (basierend auf den angeforderten Geltungsbereichen)

  3. 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:

  1. 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
  2. Der Benutzer meldet sich an und erteilt seine Zustimmung (basierend auf den angeforderten Geltungsbereichen).

  3. 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

Es gibt drei Schritte im impliziten Ablauf, um sowohl das ID-Token als auch das Zugriffstoken abzurufen:
  1. ID-Token und Zugriffstoken anfordern.

    Anforderungsbeispiel
    https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=id_token token&redirect_uri=<client_redirect_uri>&scope=address+openid+profile&nonce=abcdefghijkl
  2. Der Benutzer meldet sich an und erteilt seine Zustimmung (basierend auf den angeforderten Geltungsbereichen).

  3. Antwort mit Zugriffstoken und ID-Token.

    Antwortbeispiel
    Hinweis

    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

Es gibt vier Schritte im Hybridfluss, um sowohl den Autorisierungscode als auch das ID-Token abzurufen:
  1. 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=abcdefghijk
  2. Der Benutzer meldet sich an und erteilt seine Zustimmung (basierend auf den angeforderten Geltungsbereichen).

  3. 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
  4. Die 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:

  1. 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
  2. Der Benutzer meldet sich an und erteilt seine Zustimmung (basierend auf den angeforderten Geltungsbereichen).

  3. 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
  4. Die Clientanwendung verwendet den Autorisierungscode und fordert einen Back-Channel an, um ein neues Zugriffstoken abzurufen.

    Anforderungsbeispiel
       curl -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

Der Hybridfluss umfasst vier Schritte, um den Autorisierungscode, das ID-Token und das Zugriffstoken abzurufen:
  1. Autorisierungscode und ID-Token anfordern.

    Anforderungsbeispiel
    https://<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
  2. Der Benutzer meldet sich an und erteilt seine Zustimmung (basierend auf den angeforderten Geltungsbereichen).

  3. Antwort mit ID-Token und Zugriffstoken.

    Antwortbeispiel
    Hinweis

    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
  4. Die Clientanwendung verwendet den Autorisierungscode und fordert einen Back-Channel an, um ein neues Zugriffstoken abzurufen.

    Anforderungsbeispiel
       curl -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:

  1. 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>
  2. 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