Référentiel Liberty[8.5.5.4 ou ultérieure]

Configuration d'un fournisseur OpenID Connect pour l'acceptation des demandes d'enregistrement client

Le noeud final d'enregistrement client est un service géré par l'administrateur qui permet d'enregistrer, de mettre à jour, de supprimer et d'extraire des informations sur une partie utilisatrice OpenID Connect qui a l'intention d'utiliser le fournisseur OpenID Connect. A son tour, le processus d'enregistrement peut fournir des informations pour la partie utilisatrice, notamment le l'ID OAuth 2.0 Client et la valeur secrète du client, si elles ne sont pas spécifiées.

Avant de commencer

Le service d'enregistrement du client fonctionne selon deux modes : magasin local ou magasin de base de données. Ces modes sont déterminés par la manière dont le serveur liberty configure son magasin client, si les clients sont définis avec les attributs oauthProvider localStore (magasin local) dans le fichier server.xml ou s'ils sont configurés à l'aide d'une base de données (base de données de magasin).

In a local store configuration, the client registration service is limited to only retrieving OpenID Connect Relying Party information. Vous pouvez modifier le fichier server.xml afin d'ajouter des opérations supplémentaires pour enregistrer, mettre à jour, ou supprimer une partie utilisatrice OpenID Connect.

Dans une configuration de magasin de base de données, il n'existe pas de restriction sur le service d'enregistrement client et toutes les opérations s'effectuebt via l'interface REST.

Remarque : Un serveur liberty ne doit pas configurer son magasin client avec le magasin local et le magasin de données. Choisissez une seule route de configuration.

Le noeud final d'enregistrement client est un noeud final d'administration protégé avec la règle clientManager. Pour accéder à ce noeud final, l'utilisateur doit se voir octroyer le rôle clientManager par l'administrateur.

Le rôle clientManager est l'un des rôles oauth-roles définis pour un oauthProvider. Voici un exemple de configuration qui illustre l'octroi du rôle clientManager à l'utilisateur Alice ou aux membres du groupe clientAdministrator.

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

Pourquoi et quand exécuter cette tâche

Les informations d'enregistrement client relatives à une partie utilisatrice OpenID Connect sont largement utilisées pour définir les contraintes du scénario d'utilisation du client. Par ailleurs, d'autres opérations OP qui sont opaques pour le client utilisent les métadonnées d'enregistrement client pour des décisions d'autorisation.

L'exemple suivant suppose que le Liberty OP est configuré avec SSL sur le port 443.

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

L'exemple précédent suppose également que le fichier server.xml est configuré avec un nom d'utilisateur : clientAdmin et un mot de passe : clientAdminPassword, qui utilise oauth-role: clientManager.

Les métadonnées d'enregistrement client comportent les paramètress suivants :

Tableau 1. Paramètres d'enregistrement client
Nom d'attribut Type de données Obligatoire/Facultatif Description
client_id Entrée/Sortie Facultatif Identificateur client qui est enregistré avec OP. Sauf indication contraire, cette valeur de paramètre est générée lors de l'enregistrement. Il s'agit d'une chaîne.
client_secret Entrée/Sortie Facultatif Valeur secrète du client qui est enregistrée avec OP. Sauf indication contraire, cette valeur de paramètre est générée lors de l'enregistrement. Il s'agit d'une chaîne. Pendant une opération de mise à jour, la valeur de paramètre ‘*’ conserve la valeur existante. Une valeur de paramètre vide génère un nouveau nom client_secret. Une valeur de paramètre non vide remplace la valeur existante par la nouvelle valeur spécifiée.
client_name Entrée/Sortie Facultatif Description du client qui est enregistrée avec OP. Sauf indication contraire, ce paramètre est défini sur la valeur par défaut du paramètre client_id. Il s'agit d'une chaîne.
application_type Entrée Facultatif Type d'application qui décrit le client. Sauf indication contraire, la valeur par défaut est web. Il s'agit d'une chaîne. Par exemple, les valeurs possibles sont les suivantes :
  • <une valeur vide est valide>
  • web
  • natif
response_types Entrée Facultatif Contraintes de type de réponse qui sont utilisées par ce client. Sauf indication contraire, la valeur par défaut est code. Il s'agit d'un tableau JSON. Par exemple, les valeurs possibles sont les suivantes :
  • <une valeur vide est valide>
  • code
  • token
  • id_token token (order reversible)

Pour un nom response_type spécifique, le nom grant_types correspondant doit être spécifié. Pour plus d'informations, voir response_types sur le site Web Client Metadata website.

grant_types Entrée Facultatif Contraintes de type d'octroi qui sont utilisées par ce client. Sauf indication contraire, la valeur par défaut est authorization_code. Il s'agit d'un tableau JSON. Par exemple, les valeurs possibles sont les suivantes :
  • <une valeur vide est valide>
  • authorization_code
  • implicit
  • refresh_token
  • client_credentials
  • urn:ietf:params:oauth:grant-type:jwtbearer
  • password
redirect_uris Entrée Facultatif Tableau des URI de redirection auquel le client est contraint. Il s'agit d'un tableau JSON.
post_logout_redirect_uris Entrée Facultatif Tableau des URI de redirection post connexion auquel le client est contraint. Il s'agit d'un tableau JSON.
trusted_uri_prefixes Entrée Facultatif Tableau des préfixes d'URI sécurisés que le client a jugés sûrs pour l'envoi des jetons d'accès. Il s'agit d'un tableau JSON.
scope Entrée Facultatif Valeurs de portée, délimitées par des espaces, auxquelles le client est contraint. Il s'agit d'une chaîne. Si le client est autorisé à demander une portée, la valeur ALL_SCOPES peut être utilisée.
preauthorized_scope Entrée Facultatif Valeurs de portée, délimitées par des espaces, que le client pré-autorise et qui ne requièrent pas l'accord de l'utilisateur. Il s'agit d'une chaîne.
subject_type Entrée Facultatif Contrainte de type de sujet qui est décrite par le client. Il s'agit d'une chaîne. Par exemple, les valeurs possibles sont les suivantes :
  • <une valeur vide est valide>
  • public
token_endpoint_auth_method Entrée Facultatif Contrainte de méthode d'authentification de noeud final de jeton qui est utilisée par le client. Sauf indication contraire, la valeur par défaut est client_secret_basic. Il s'agit d'une chaîne. Par exemple, les valeurs possibles sont les suivantes :
  • <une valeur vide est valide>
  • client_secret_basic
  • client_secret_post
  • none
functional_user_id Entrée Facultatif Ce paramètre indique l'ID utilisateur à associer à une demande effectuée sur le compte d'un client dans un type d'octroi client_credentials. Il s'agit d'une chaîne.
functional_user_groupIds Entrée Facultatif Liste des ID de groupe à associer aux jetons d'accès obtenus par ce client avec le type d'accord de données d'identification client. La valeur est une liste d'ID groupe dont l'utilisateur fonctionnel est membre, où les ID groupe sont des chaînes sensibles à la casse. Les chaînes sont définies par le serveur d'autorisations. Si la valeur contient plusieurs ID groupe, leur ordre n'a pas d'importance. Si la liste est vide, la demande est omise. Lorsque ce paramètre de métadonnées client est spécifié, la valeur est retournée dans le paramètre de réponse functional_user_groupIds du noeud final d'introspection pour les jetons d'accès qui sont émis pour ce client avec un octroi de données d'identification client. Si le paramètre functional_user_id n'est pas utilisé, il est ignoré.
Remarque : Les serveurs d'autorisations ne doivent pas faire confiance au client pour l'auto-assertion de ce paramètre.
introspect_tokens Entrée Facultatif Valeur de paramètre qui indique si le client dispose des droits d'accès pour inspecter un jeton d'accès émis par l'opération. Il s'agit d'une valeur booléenne.
registration_client_uri Sortie uniquement N/A Paramètre qui est renvoyé dans une réponse avec la valeur qui indique l'adresse URL unique pour un client enregistré. Il s'agit d'une chaîne.
client_secret_expires_at Sortie uniquement N/A Paramètre qui est renvoyé dans une réponse avec la valeur qui indique le nombre de secondes de 1970-01- 01T0:0:0Z tel que mesuré dans UTC, auquel la valeur secrète du client expire. La valeur 0 indique l'absence de délai d'expiration.
client_id_issued_at Sortie uniquement N/A Paramètre qui est renvoyé dans une réponse avec la valeur qui indique le nombre de secondes de 1970-01- 01T0:0:0Z tel que mesuré dans UTC, auquel l'ID client a été émis. La valeur 0 indique qu'aucune heure d'émission de l'ID client n'a été identifiée.

Procédure

  1. Enregistrez un client, comme illustré dans l'exemple suivant :

    En-têtes de demande :

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

    Contenu de demande :

    {
       "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"
       ]
    }

    En-têtes de réponse :

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

    Corps de réponse :

    {
       "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. Mettez à jour un client, comme illustré dans l'exemple suivant :

    En-têtes de demande :

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

    Contenu de la demande :

    {
       "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"
       ]
    }

    En-têtes de réponse :

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

    Corps de réponse :

    {
       "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. Extrayez un client, comme illustré dans l'exemple suivant :

    En-têtes de demande :

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

    En-têtes de réponse :

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

    Corps de réponse :

    {
       "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. Extrayez un client (demande de tête), comme illustré dans l'exemple suivant :

    En-têtes de demande :

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

    En-têtes de réponse :

    Status: 200
    Cache-Control: private, no-cache=set-cookie
    ETag: “3DD7affTGS91mfhPZ83B39Y==”
    Content-Type: application/json
  5. Supprimez un client, comme illustré dans l'exemple suivant :

    En-têtes de demande :

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

    En-têtes de réponse :

    Status: 204
    Content-Length: 0
    Content-Language: en-US
    Remarque : Les informations de cette rubrique s'appliquent également aux services d'enregistrement client des clients OAuth 2.0 et aux parties utilisatrices OpenID Connect.

Icône indiquant le type de rubrique Rubrique Tâche

Dispositions pour les centres de documentation | Commentaires


Icône d'horodatage Dernière mise à jour: Wednesday, 2 September 2015
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=twlp_client_registration
Nom du fichier : twlp_client_registration.html