Akzeptieren von Clientregistrierungsanforderungen durch einen OpenID Connect-Provider konfigurieren

Der Clientregistrierungsendpunkt ist ein von einem Administrator verwalteter Service zum Registrieren, Aktualisieren, Löschen und Abrufen von Informationen zu einer OpenID-Connect-Relying-Party, die den OpenID Connect-Provider verwenden möchte. Der Registrierungsprozess kann wiederum Informationen für die Relying Party bereitstellen, einschließlich der OAuth-2.0-Client-ID und des geheimen Clientschlüssels, sofern diese Informationen nicht angegeben sind.

Vorbereitende Schritte

Der Clientregistrierungsservice arbeitet in einem von zwei Modi, als lokaler Speicher oder als Datenbankspeicher. Der verwendete Modus wird ausgehend davon bestimmt, wie der Liberty-Server seinen Clientspeicher konfiguriert. Wenn Clients mit den Attributen oauthProvider localStore in der Datei server.xml konfiguriert sind, wird der lokale Speicher verwendet. Wenn Clients mit einer Datenbank konfiguriert sind, wird der Datenbankspeicher verwendet.

In einer Konfiguration mit lokalem Speicher ist der Clientregistrierungsservice darauf beschränkt, Informationen zur OpenID-Connect-Relying-Party abzurufen. Sie können die Datei server.xml modifizieren und weitere Operationen hinzufügen, um eine OpenID-Connect-Relying-Party zu registrieren, zu aktualisieren oder zu löschen.

Bei einer Konfiguration mit Datenbankspeicher gibt es keine Beschränkung des Clientregistrierungsservice. Alle Operationen werden über die REST-Schnittstelle ausgeführt.

Anmerkung: Ein Liberty-Server darf seinen Clientspeicher nicht gleichzeitig mit lokalem Speicher und Datenbankspeicher konfigurieren. Wählen Sie eine der beiden Konfigurationsoptionen.

Der Clientregistrierungsendpunkt ist ein geschützter Administrationsendpunkt mit der Rolle clientManager. Damit ein Benutzer auf diesen Endpunkt zugreifen kann, muss der Administrator ihm die Rolle clientManager zugewiesen haben.

Die Rolle clientManager ist eine der oauth-roles-Rollen, die für oauthProvider definiert wird. In der folgenden Beispielkonfiguration wird die Rolle clientManager dem Benutzer Alice oder Mitgliedern der Gruppe clientAdministrator zugewiesen.

<oauth-roles>
<authenticated>
<special-subject type="ALL_AUTHENTICATED_USERS"/>
</authenticated>
<clientManager>
<group name="clientAdministrator" />
<user name="Alice" />
</clientManager>
</oauth-roles>

Informationen zu diesem Vorgang

Clientregistrierungsinformationen zu einer OpenID-Connect-Relying-Party werden größtenteils verwendet, um Bedingungen für die Einsatzszenarien des Clients zu definieren. Andere Operationen des OP, die für den Client nicht transparent sind, verwenden die Metadaten der Clientregistrierung, um Autorisierungsentscheidungen zu treffen.

Im folgenden Beispiel wird davon ausgegangen, dass der Liberty-OP mit SSL am Port 443 konfiguriert ist.

https://server.example.com:443/oidc/endpoint/<Providername>/registration

Im obigen Beispiel wird außerdem vorausgesetzt, dass die Datei server.xml mit dem Benutzernamen clientAdmin und dem Kennwort clientAdminPassword konfiguriert ist und dass diesem Benutzer die oauth-role clientManager zugewiesen ist.

Die Metadaten der Clientregistrierung umfassen die folgenden Parameter:

Tabelle 1. Clientregistrierungsparameter
Attributname Datentyp Erforderlich/Optional Beschreibung
client_id Eingabe/Ausgabe Optional Die Client-ID, die beim OP registriert wird. Wenn nicht anders angegeben, wird der Wert dieses Parameters standardmäßig während der Registrierung generiert. Dies ist eine Zeichenfolge.
client_secret Eingabe/Ausgabe Optional Der geheime Clientschlüssel, der beim OP registriert wird. Wenn nicht anders angegeben, wird der Wert dieses Parameters standardmäßig während der Registrierung generiert. Dies ist eine Zeichenfolge. Während einer Aktualisierungsoperation sorgt der Parameterwert ‘*’ dafür, dass der vorhandene Wert erhalten bleibt. Bei einem leeren Parameterwert wird ein neuer geheimer Clientschlüssel (client_secret) generiert. Bei einem nicht leeren Parameterwert wird der vorhandene Wert mit dem neu angegebenen Wert überschrieben.
client_name Eingabe/Ausgabe Optional Eine Beschreibung für den Client, der beim OP registriert wird. Wenn nicht anders angegeben, wird dieser Parameter standardmäßig auf den Wert des Parameters client_id gesetzt. Dies ist eine Zeichenfolge.
application_type Eingabe Optional Der Anwendungstyp, der den Client beschreibt. Wenn nicht anders angegeben, lautet der Standardwert web. Dies ist eine Zeichenfolge. Gültige Werte sind beispielsweise:
  • <ein leerer Wert ist gültig>
  • web
  • native
response_types Eingabe Optional Die von diesem Client verwendeten Beschränkungen für den Antworttyp. Wenn nicht anders angegeben, lautet der Standardwert code. Dies ist ein JSON-Array. Gültige Werte sind beispielsweise:
  • <ein leerer Wert ist gültig>
  • code
  • token
  • id_token token (Reihenfolge umkehrbar)

Für einen bestimmten response_type müssen die entsprechenden grant_types angegeben werden. Weitere Informationen finden Sie in der Beschreibung der response_types auf der Website Client Metadata.

grant_types Eingabe Optional Die von diesem Client verwendeten Beschränkungen für den Grant-Typ. Wenn nicht anders angegeben, lautet der Standardwert authorization_code. Dies ist ein JSON-Array. Gültige Werte sind beispielsweise:
  • <ein leerer Wert ist gültig>
  • authorization_code
  • implicit
  • refresh_token
  • client_credentials
  • urn:ietf:params:oauth:grant-type:jwtbearer
  • password
redirect_uris Eingabe Optional Das Array der Umleitungs-URIs, auf die der Client beschränkt ist. Dies ist ein JSON-Array.
post_logout_redirect_uris Eingabe Optional Das Array der Umleitungs-URIs nach Abmeldung, auf die der Client beschränkt ist. Dies ist ein JSON-Array.
trusted_uri_prefixes Eingabe Optional Das Array vertrauenswürdiger URI-Präfixe, die der Client für sicher zum Senden von Zugriffstoken hält. Dies ist ein JSON-Array.
scope Eingabe Optional Mit einem Leerzeichen als Trennzeichen angegebene Bereichswerte, auf die der Client beschränkt ist. Dies ist eine Zeichenfolge. Wenn der Client jeden Bereich anfordern darf, kann der Wert ALL_SCOPES verwendet werden.
preauthorized_scope Eingabe Optional Mit einem Leerzeichen als Trennzeichen angegebene Bereichswerte, die vom Client vorab autorisiert sind und keine Einwilligung des Benutzers erfordern. Dies ist eine Zeichenfolge.
subject_type Eingabe Optional Die vom Client beschriebene Beschränkung des Subjekttyps. Dies ist eine Zeichenfolge. Gültige Werte sind beispielsweise:
  • <ein leerer Wert ist gültig>
  • public
token_endpoint_auth_method Eingabe Optional Die vom Client verwendete Beschränkung der Authentifizierungsmethode für den Tokenendpunkt. Wenn nicht anders angegeben, lautet der Standardwert client_secret_basic. Dies ist eine Zeichenfolge. Gültige Werte sind beispielsweise:
  • <ein leerer Wert ist gültig>
  • client_secret_basic
  • client_secret_post
  • none
functional_user_id Eingabe Optional Dieser Parameter gibt an, welche Benutzer-ID einer Anforderung zugeordnet werden soll, die im Namen eines Clients mit einem Grant-Typ client_credentials abgesetzt wird. Dies ist eine Zeichenfolge.
functional_user_groupIds Eingabe Optional Eine Liste mit Gruppen-IDs, die Zugriffstoken zugeordnet werden sollen, die von diesem Client mit dem Grant-Typ "Clientberechtigungsnachweise" abgerufen werden. Der Wert ist eine Liste mit Gruppen-IDs. Der funktionale Benutzer ist ein Mitglied dieser Gruppen. Bei Angabe der Gruppen-IDs wird die Groß-/Kleinschreibung unterschieden. Die Zeichenfolgen werden vom Berechtigungsserver definiert. Wenn der Wert mehrere Gruppen-IDs enthält, ist die Reihenfolge der IDs nicht wichtig. Ist die Liste leer, wird der Anspruch übergangen. Wenn dieser Parameter der Clientmetadaten angegeben ist, wird der Wert im Antwortparameter functional_user_groupIds vom Introspektionsendpunkt für Zugriffstoken zurückgegeben, die für diesen Client mit dem Grant-Typ "Clientberechtigungsnachweise" ausgegeben werden. Wenn der Parameter functional_user_id nicht verwendet wird, wird dieser Parameter ignoriert.
Anmerkung: Berechtigungsserver dürfen nicht akzeptieren, dass der Client diesen Parameter selbst zuweist.
introspect_tokens Eingabe Optional Ein Parameterwert, der angibt, ob der genannte Client berechtigt ist, ein vom OP ausgegebenes Zugriffstoken zu überprüfen. Dies ist ein boolescher Wert.
registration_client_uri Nur Ausgabe Nicht zutreffend Ein Parameter, der in einer Antwort mit dem Wert zurückgegeben wird, der die eindeutige URL für einen registrierten Client angibt. Dies ist eine Zeichenfolge.
client_secret_expires_at Nur Ausgabe Nicht zutreffend Ein Parameter, der in einer Antwort mit dem Wert zurückgegeben wird, der die Zeit in Sekunden (ab 1970-01- 01T0:0:0Z, gemessen in UTC) angibt, nach der der geheime Clientschlüssel abläuft. Der Wert 0 gibt an, dass keine Verfallszeit gilt.
client_id_issued_at Nur Ausgabe Nicht zutreffend Ein Parameter, der in einer Antwort mit dem Wert zurückgegeben wird, der die Zeit in Sekunden (ab 1970-01- 01T0:0:0Z, gemessen in UTC) angibt, nach der die Client-ID ausgegeben wurde. Der Wert 0 gibt an, dass keine Ausgabezeit für die Client-ID festgestellt werden konnte.

Vorgehensweise

  1. Registrieren Sie einen Client wie im folgenden Beispiel:

    Anforderungsheader:

    POST https://server.example.com:443/oidc/endpoint/<Providername>/registration
    Accept: application/json
    Content-Type: application/json
    Authorization: Basic Y2xpZW50QWRtaW46Y2xpZW50QWRtaW5QYXNzd29yZA==

    Anforderungsnutzdaten:

    {
       "token_endpoint_auth_method":"client_secret_basic",
       "scope":"openid profile email general",
       "grant_types":[
          "authorization_code",
          "client_credentials",
          "implicit",
          "refresh_token",
          "urn:ietf:params:oauth:grant-type:jwt-bearer"
       ],
       "response_types":[
          "code",
          "token",
          "id_token token"
       ],
       "application_type":"web",
       "subject_type":"public",
       "post_logout_redirect_uris":[
          "https://server.example.com:9000/logout/",
          "https://server.example.com:9001/exit/"
       ],
       "preauthorized_scope":"openid profile email general",
       "introspect_tokens":true,
       "trusted_uri_prefixes":[
          "https://server.example.com:9000/trusted/"
       ],
       "redirect_uris":[
          "https://server.example.com:443/resource/redirect1",
          "https://server.example.com:9000/resource/redirect2"
       ]
    }

    Antwortheader:

    Status: 201
    Cache-Control: private
    ETag: "1B2M2Y8AsgTpgAmY7PhCfg=="
    Content-Type: application/json

    Antworthauptteil:

    {
       "client_id_issued_at":1401776782,
       "registration_client_uri":"https://server.example.com:8020/oidc/endpoint/OIDC/registration/b0a376ec4b694b67b6baeb0604a312d8",
       "client_secret_expires_at":0,
       "token_endpoint_auth_method":"client_secret_basic",
       "scope":"openid profile email general",
       "grant_types":[
          "authorization_code",
          "client_credentials",
          "implicit",
          "refresh_token",
          "urn:ietf:params:oauth:grant-type:jwt-bearer"
       ],
       "response_types":[
          "code",
          "token",
          "id_token token"
       ],
       "application_type":"web",
       "subject_type":"public",
       "post_logout_redirect_uris":[
          "https://server.example.com:9000/logout/",
          "https://server.example.com:9001/exit/"
       ],
       "preauthorized_scope":"openid profile email general",
       "introspect_tokens":true,
       "trusted_uri_prefixes":[
          "https://server.example.com:9000/trusted/"
       ],
       "client_id":"b0a376ec4b694b67b6baeb0604a312d8",
       "client_secret":"nmrOQ20CrMdwd4pjqaimutZTcbQPzIoYgItjaccb9Wk33rKarhM3WDLmWIoE",
       "client_name":"b0a376ec4b694b67b6baeb0604a312d8",
       "redirect_uris":[
          "https://server.example.com:443/resource/redirect1",
          "https://server.example.com:9000/resource/redirect2"
       ]
    }
  2. Aktualisieren Sie einen Client wie im folgenden Beispiel:

    Anforderungsheader:

    PUT https://server.example.com:443/oidc/endpoint/<Providername>/registration/registration/b0a376ec4b694b67b6baeb0604a312d8
    Accept: application/json
    Content-Type: application/json
    Authorization: Basic Y2xpZW50QWRtaW46Y2xpZW50QWRtaW5QYXNzd29yZA==

    Anforderungsnutzdaten:

    {
       "token_endpoint_auth_method":"client_secret_basic",
       "scope":"openid profile",
       "grant_types":[
          "authorization_code"
       ],
       "response_types":[
          "code"
       ],
       "application_type":"native",
       "subject_type":"public",
       "post_logout_redirect_uris":[
          "https://server.example.com:9000/logout/"
       ],
       "preauthorized_scope":"openid",
       "introspect_tokens":false,
       "trusted_uri_prefixes":[
          "https://server.example.com:9003/trusted/"
       ],
       "client_id":"b0a376ec4b694b67b6baeb0604a312d8",
       "client_secret":"*",
       "client_name":"updated client",
       "redirect_uris":[
          "https://server.example.com:443/resource/redirect1"
       ]
    }

    Antwortheader:

    Status: 200
    ETag: "3DD7affTGS91mfhPZ83B39Y=="
    Content-Type: application/json

    Antworthauptteil:

    {
       "client_id_issued_at":1401776782,
       "registration_client_uri":"https://server.example.com:8020/oidc/endpoint/OIDC/registration/b0a376ec4b694b67b6baeb0604a312d8",
       "client_secret_expires_at":0,
       "token_endpoint_auth_method":"client_secret_basic",
       "scope":"openid profile",
       "grant_types":[
          "authorization_code"
       ],
       "response_types":[
          "code"
       ],
       "application_type":"native",
       "subject_type":"public",
       "post_logout_redirect_uris":[
          "https://server.example.com:9000/logout/"
       ],
       "preauthorized_scope":"openid",
       "introspect_tokens":false,
       "trusted_uri_prefixes":[
          "https://server.example.com:9003/trusted/"
       ],
       "client_id":"b0a376ec4b694b67b6baeb0604a312d8",
       "client_secret":"*",
       "client_name":"updated client",
       "redirect_uris":[
          "https://server.example.com:443/resource/redirect1"
       ]
    }
  3. Rufen Sie einen Client wie im folgenden Beispiel ab:

    Anforderungsheader:

    GET https://server.example.com:443/oidc/endpoint/<Providername>/registration/registration/b0a376ec4b694b67b6baeb0604a312d8
    Accept: application/json
    Authorization: Basic Y2xpZW50QWRtaW46Y2xpZW50QWRtaW5QYXNzd29yZA==

    Antwortheader:

    Status: 200
    Cache-Control: private
    ETag: "3DD7affTGS91mfhPZ83B39Y=="
    Content-Type: application/json

    Antworthauptteil:

    {
       "client_id_issued_at":1401776782,
       "registration_client_uri":"https://server.example.com:8020/oidc/endpoint/OIDC/registration/b0a376ec4b694b67b6baeb0604a312d8",
       "client_secret_expires_at":0,
       "token_endpoint_auth_method":"client_secret_basic",
       "scope":"openid profile",
       "grant_types":[
          "authorization_code"
       ],
       "response_types":[
          "code"
       ],
       "application_type":"native",
       "subject_type":"public",
       "post_logout_redirect_uris":[
          "https://server.example.com:9000/logout/"
       ],
       "preauthorized_scope":"openid",
       "introspect_tokens":false,
       "trusted_uri_prefixes":[
          "https://server.example.com:9003/trusted/"
       ],
       "client_id":"b0a376ec4b694b67b6baeb0604a312d8",
       "client_secret":"*",
       "client_name":"updated client",
       "redirect_uris":[
          "https://server.example.com:443/resource/redirect1"
       ]
    }
  4. Rufen Sie einen Client wie im folgenden Beispiel ab (HEAD-Anforderung):

    Anforderungsheader:

    HEAD https://server.example.com:443/oidc/endpoint/<Providername>/registration/registration/b0a376ec4b694b67b6baeb0604a312d8
    Accept: application/json
    Authorization: Basic Y2xpZW50QWRtaW46Y2xpZW50QWRtaW5QYXNzd29yZA==

    Antwortheader:

    Status: 200
    Cache-Control: private, no-cache=set-cookie
    ETag: "3DD7affTGS91mfhPZ83B39Y=="
    Content-Type: application/json
  5. Löschen Sie einen Client wie im folgenden Beispiel:

    Anforderungsheader:

    DELETE https://server.example.com:443/oidc/endpoint/<Providername>/registration/registration/b0a376ec4b694b67b6baeb0604a312d8
    Authorization: Basic Y2xpZW50QWRtaW46Y2xpZW50QWRtaW5QYXNzd29yZA==

    Antwortheader:

    Status: 204
    Content-Length: 0
    Content-Language: en-US
    Anmerkung: Die Informationen in diesem Abschnitt gelten auch für Clientregistrierungsservices von OAuth-2.0-Clients und OpenID-Connect-Relying-Partys.

Symbol das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 01.12.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twlp_client_registration
Dateiname: twlp_client_registration.html