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.

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

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

  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 des Transports nicht manipuliert wurde.

    Der folgende Anwendungsfall enthält Informationen dazu, 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 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.

Hinweis

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.

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

  2. Stellen Sie sicher, dass die aktuelle Zeit vor der Zeit liegt, die durch den Claim für die Ablaufzeit (exp) dargestellt wird.

  3. 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();
            }
        }
     
    }
  4. Stellen Sie sicher, dass der Wert des Claims der Aussteller-ID (iss) genau mit dem Wert des Claims iss (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 bereitstellt
    Hinweis

    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

email

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

Der Ablauf "Autorisierungscode" umfasst zwei Schritte:
  1. 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
  2. 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.

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

In diesem Ablauf ist keine programmgesteuerte/rückkanalige Tokenanforderung involviert (wie die Public Client-Anforderung im Beispiel für Autorisierungscodeablauf). Alle Token werden vom Endpunkt Authorization zurückgegeben, und der Endpunkt token wird nicht verwendet. Der Implicit-Flow 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 Implicit-Ablauf unterstützt:

  • id_token (ID-Token)

  • token (Zugriffstoken)

  • id_token token (ID-Token und Zugriffstoken)

ID-Token abrufen

Der implizite Ablauf umfasst drei Schritte, um ein ID-Token abzurufen:
  1. 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
  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

Der implizite Ablauf umfasst drei Schritte, 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

Der implizite Ablauf umfasst drei Schritte, um sowohl das ID-Token als auch das Zugriffstoken abzurufen:
  1. Fordern Sie das ID-Token und das Zugriffstoken an.

    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

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

Der Hybridfluss umfasst vier Schritte, um sowohl den Autorisierungscode als auch das ID-Token abzurufen:
  1. 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
  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 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:

  1. 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
  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 Backkanal 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. Fordern Sie den Autorisierungscode und das ID-Token an.

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

Sie können eine Abmeldung mit OpenID Connect auf zwei Arten anfordern:

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