Configuración de un proveedor de OpenID Connect para que acepte solicitudes de registro de cliente

El punto final de registro de cliente es un servidor gestionado por el administrador que se utiliza para registrar, actualizar, suprimir y recuperar información sobre una OpenID Connect Relying Party que tiene la intención de utilizar el proveedor de OpenID Connect. A su vez, el proceso de registro puede proporcionar información para que la Relying Party lo utilice, incluyendo el ID de cliente de OAuth 2.0 y el secreto de cliente, si no se especifican.

Antes de empezar

El servicio de registro del cliente opera en una de dos modalidades: almacén local o almacén de base de datos. Estas modalidades están determinadas por la forma en que el servidor de Liberty configura su almacén de cliente, si los clientes están definidos con los atributos oauthProvider localStore (almacén local) en el archivo server.xml o están configurados con una base de datos (almacén de base de datos).

En una configuración de almacén local, el servicio de registro de cliente está limitado a recuperar sólo información de OpenID Connect Relying Party. Puede modificar el archivo server.xml para añadir más operaciones para registrar, actualizar o suprimir una OpenID Connect Relying Party.

En una configuración de almacén de base de datos, no hay limitación en el servicio de registro de cliente y todas las operaciones son funcionales a través de la interfaz de REST.

Nota: un servidor de Liberty no debe configurar su almacén de cliente con un almacén local y un almacén de base de datos. Elija sólo una ruta de configuración.

El punto final de registro de cliente es un punto final de administración protegido con el rol clientManager. Para acceder a este punto final, el administrador debe otorgar al usuario el rol clientManager.

El rol clientManager es uno de los oauth-roles definidos para un oauthProvider. A continuación figura una configuración de ejemplo que muestra el otorgamiento del rol clientManager al usuario Alice o a los miembros del grupo clientAdministrator.

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

Acerca de esta tarea

La información de registro del cliente acerca de una OpenID Connect Relying Party se utiliza ampliamente para definir las restricciones de escenario de uso del cliente. Además, otras operaciones del OP que son opacas con respecto al cliente utilizan los metadatos de registro de cliente para tomar decisiones de autorización.

En el ejemplo siguiente se presupone que el OP Liberty está configurado con SSL en el puerto 443.

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

En el ejemplo anterior también se presupone que el archivo server.xml se ha configurado con el nombre de usuario clientAdmin y la contraseña clientAdminPassword, que utiliza el oauth-role: clientManager.

Los metadatos de registro de cliente constan de los parámetros siguientes:

Tabla 1. Parámetros de registro de cliente
Nombre de atributo Tipo de datos Obligatorio/Opcional Descripción
client_id Entrada/salida Opcional El identificador de cliente que se está registrado en el OP. Si no se especifica, este valor de parámetro se genera durante el registro de forma predeterminada. Es una serie.
client_secret Entrada/salida Opcional El secreto de cliente que se está registrado en el OP. Si no se especifica, este valor de parámetro se genera durante el registro de forma predeterminada. Es una serie. Durante una operación de actualización, el valor de parámetro '*' conserva el valor existente. Un valor de parámetro en blanco genera un nuevo client_secret. Un valor de parámetro que no esté en blanco altera temporalmente el valor existente con el nuevo valor especificado.
client_name Entrada/salida Opcional Descripción del cliente que se está registrado en el OP. Si no se especifica, este parámetro se establece en el valor del parámetro client_id de forma predeterminada. Es una serie.
application_type Entrada Opcional El tipo de aplicación que describe el cliente. Si no se especifica, el valor predeterminado es web. Es una serie. Por ejemplo, valores posibles:
  • <un valor vacío es válido>
  • web
  • native
response_types Entrada Opcional Las restricciones de tipo de respuesta utilizadas por este cliente. Si no se especifica, el valor predeterminado es code. Es una matriz JSON. Por ejemplo, valores posibles:
  • <un valor vacío es válido>
  • code
  • token
  • id_token token (orden reversible)

Para un response_type específico, debe especificarse los grant_types correspondientes. Para obtener más información, consulte response_types en el sitio web de Metadatos de cliente.

grant_types Entrada Opcional Las restricciones de tipo de otorgamiento utilizadas por este cliente. Si no se especifica, el valor predeterminado es authorization_code. Es una matriz JSON. Por ejemplo, valores posibles:
  • <un valor vacío es válido>
  • authorization_code
  • implicit
  • refresh_token
  • client_credentials
  • urn:ietf:params:oauth:grant-type:jwtbearer
  • password
redirect_uris Entrada Opcional La matriz de los URI de redirección a los que el cliente está limitado. Es una matriz JSON.
post_logout_redirect_uris Entrada Opcional La matriz de URIs de redirección de cierre de sesión de publicación a los que el cliente está limitado. Es una matriz JSON.
trusted_uri_prefixes Entrada Opcional La matriz de prefijos de URI de confianza que el cliente ha considerado seguros para enviar señales de acceso. Es una matriz JSON.
scope Entrada Opcional Los valores de ámbito delimitados por espacios a los que el cliente está limitado. Es una serie. Si el cliente está autorizado a solicitar cualquier ámbito, puede utilizarse un valor de ALL_SCOPES.
preauthorized_scope Entrada Opcional Los valores de ámbito delimitados por espacios a los que el cliente está preautorizando que no requieren el consentimiento del usuario. Es una serie.
subject_type Entrada Opcional La restricción de tipo de sujeto descrita por el cliente. Es una serie. Por ejemplo, valores posibles:
  • <un valor vacío es válido>
  • public
token_endpoint_auth_method Entrada Opcional La restricción de método de autenticación de punto final de señal utilizada por el cliente. Si no se especifica, el valor predeterminado es client_secret_basic. Es una serie. Por ejemplo, valores posibles:
  • <un valor vacío es válido>
  • client_secret_basic
  • client_secret_post
  • none
functional_user_id Entrada Opcional Este parámetro indica qué ID de usuario debe asociarse con una solicitud realizada en nombre de un cliente en un tipo de otorgamiento client_credentials. Es una serie.
functional_user_groupIds Entrada Opcional Una lista de IDs de grupo que deben asociarse con señales de acceso obtenidas por este cliente utilizando el tipo de otorgamiento de credenciales de cliente. El valor es una lista de IDs de grupo de los que el usuario funcional es miembro, donde los ID de grupo son series sensibles a las mayúsculas y minúsculas. El servidor de autorizaciones define las series. Si el valor contiene varios ID de grupo, su orden no importa. Si la lista está vacía, la declaración se omite. Cuando se especifica este parámetro de metadatos de cliente, el valor se devuelve en el parámetro de respuesta functional_user_groupIds desde el punto final de introspección para las señales de acceso enviadas a este cliente con un otorgamiento de credenciales de cliente. Si el parámetro functional_user_id no se utiliza, este parámetro se ignora.
Nota: los servidores de autorización no deben confiar en el cliente para autoafirmar este parámetro.
introspect_tokens Entrada Opcional Un valor de parámetro que indica si el cliente especificado tiene el privilegio para realizar la introspección de una señal de acceso emitida por el OP. Es un valor booleano.
registration_client_uri Sólo salida N/A Un parámetro que se devuelve en una respuesta con el valor que indica el URL exclusivo para un cliente registrado. Es una serie.
client_secret_expires_at Sólo salida N/A Un parámetro que se devuelve en una respuesta con el valor que indica el número de segundos desde 1970-01-01T0:0:0Z medidos en UTC, después del cual caduca el secreto de cliente. El valor 0 indica que no hay tiempo de caducidad.
client_id_issued_at Sólo salida N/A Un parámetro que se devuelve en una respuesta con el valor que indica el número de segundos desde 1970-01-01T0:0:0Z medidos en UTC, momento en el que se ha emitido el ID de cliente. El valor 0 indica que no se ha identificado ninguna hora de emisión de ID.

Procedimiento

  1. Registre un cliente, tal como se muestra en el ejemplo siguiente:

    Cabeceras de solicitud:

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

    Carga útil de la solicitud:

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

    Cabeceras de respuesta:

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

    Cuerpo de la respuesta:

    {
       "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. Actualice un cliente, tal como se muestra en el ejemplo siguiente:

    Cabeceras de solicitud:

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

    Carga útil de la solicitud:

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

    Cabeceras de respuesta:

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

    Cuerpo de la respuesta:

    {
       "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. Recupere un cliente, tal como se muestra en el ejemplo siguiente:

    Cabeceras de solicitud:

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

    Cabeceras de respuesta:

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

    Cuerpo de la respuesta:

    {
       "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. Recupere un cliente (solicitud de cabecera), como se muestra en el ejemplo siguiente:

    Cabeceras de solicitud:

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

    Cabeceras de respuesta:

    Status: 200
    Cache-Control: private, no-cache=set-cookie
    ETag: "3DD7affTGS91mfhPZ83B39Y=="
    Content-Type: application/json
  5. Suprima un cliente, tal como se muestra en el ejemplo siguiente:

    Cabeceras de solicitud:

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

    Cabeceras de respuesta:

    Status: 204
    Content-Length: 0
    Content-Language: en-US
    Nota: la información de este tema también se aplica a los servicios de registro de cliente de los clientes OAuth 2.0 y a las partes dependientes de OpenID Connect.

Icono que indica el tipo de tema Tema de tarea



Icono de indicación de fecha y hora Última actualización: Tuesday, 6 December 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twlp_client_registration
Nombre de archivo:twlp_client_registration.html