[16.0.0.3 and later]

Configuración de la autenticación de JSON Web Token para OpenID Connect

Puede configurar un servidor de Liberty para aceptar una señal JWT (JSON Web Token) como una señal de autenticación desde un proxy de autenticación de confianza, un cliente de servicio de confianza o un servidor de autorización OAuth.

Acerca de esta tarea

Para configurar un servidor de Liberty para aceptar una señal JWT como una señal de autenticación, habilite la característica openidConnectClient-1.0, establezca inboundPropagation="required" y configure un almacén de confianza y SSL. Opcionalmente puede especificar configuración adicional de JWT como, por ejemplo, registros de usuarios, filtros de autenticación y correlación de reclamación y sujeto. La configuración para utilizar JWT como una señal de autenticación es similar a la Configuración de un cliente de OpenID Connect en Liberty.

Cualquier parte de confianza en posesión de una señal JWT puede utilizar esta señal para acceder a los recursos asociados en Liberty. El servidor de recursos de Liberty valida la señal JWT y crea el sujeto autenticado desde la señal JWT. Para que se acepte como una señal de autenticación, la señal JWT debe contener reclamaciones iss, sub y exp, y firmarse con el algoritmo RS256 o HS256. No se admite JWT cifrado. En el ejemplo siguiente se muestra una carga útil de JWT descodificada:
{
	"iss":"https://idp.acme.com:8020/jwt",
	"sub":"marissa@acme.com",
	"exp":1385066178,
	"aud":"https://resource.acme.com/services",
	"iat":1385062578,
	“groupIds”: [
	    “group1”, “group2”
	 ]  
}

Procedimiento

  1. Añada la característica de Liberty openidConnectClient-1.0 y otras características necesarias al archivo server.xml. Como mínimo, la característica openidConnectClient-1.0 requiere la característica ssl-1.0. Añada la siguiente declaración del elemento dentro del elemento featureManager en el archivo server.xml:
    <feature>openidConnectClient-1.0</feature> 	
    <feature>ssl-1.0</feature>
  2. Configure un elemento openidConnectClient y establezca inboundPropagation="required". Para obtener información sobre otros atributos de openidConnectClient, consulte OpenID Connect Client (openidConnectClient).

    En el ejemplo siguiente se presupone que el emisor de señal JWT admite JWK (JSON Web Key) y que se firma con el algoritmo RS256.

    <openidConnectClient id="RS"
    inboundPropagation="required"		
      jwkEndpointUrl="https://acme.com/jwtserver/jwk" signatureAlgorithm="RS256"
      issuerIdentifier="https://idp.acme.com:8020/jwt" >		
    </openidConnectClient>
  3. Configure un almacén de confianza para incluir el certificado de punto final JWK para que el servidor de Liberty pueda realizar conexiones SSL con el punto final JWK. Los almacenes de confianza se configuran en elementos keyStore en el archivo server.xml. Después de configurar SSL para hacer referencia a este almacén de confianza, debe establecer la configuración SSL predeterminada del servidor o especificar el ID en el atributo sslRef del elemento openidConnectClient.

    Si el emisor de JWT no admite JWK y la señal JWT se firma en su lugar con un certificado X.509, importe el certificado X.509 del emisor en el almacén de confianza. En el elemento openidConnectClient, especifique el ID de almacén de confianza en el atributo trustStoreRef y haga referencia al certificado en el atributo trustAliasName.

    Si la señal JWT se firma utilizando una clave secreta compartida con el algoritmo HMAC-SHA256, defina la clave secreta compartida en los atributos sharedKey o clientSecret.

    Para obtener información sobre almacenes de confianza o almacenes de claves, consulte Habilitación de la comunicación SSL en Liberty.

  4. Configure el atributo issuerIdentifier del elemento openidConnectClient para que coincida con la reclamación iss del emisor de JWT.

    Por ejemplo, si la señal JWT contiene "iss":"https://idp.acme.com:8020/jwt", establezca issuerIdentifier="https://idp.acme.com:8020/jwt".

  5. Opcional: Configure un registro de usuario. De forma predeterminada, las reclamaciones de JWT verificadas se utilizan para crear el sujeto autenticado del emisor, sin correlacionar la JWT con un usuario, de modo que no se requiere ningún registro de usuarios.

    Sin embargo, si el atributo mapIdentityToRegistryUser del elemento openidConnectClient se establece en true, debe devolverse una entrada de usuario para la identidad apropiada desde el servidor de autorización para que la autenticación y la autorización sean satisfactorias. Si desea más información sobre cómo configurar un registro de usuarios, consulte Configuración de un registro de usuarios en Liberty.

  6. Opcional: Configure los filtros de autenticación como se describe en Filtros de autenticación.

    Si configura un filtro de autenticación, haga referencia al filtro de autenticación en el atributo authFilterRef del elemento openidConnectClient.

    Si el elemento openidConnectClient no se configura con un atributo authFilterRef, cualquier intento de solicitud no autenticada se autentica mediante este elemento openidConnectClient.

  7. Opcional: Configure el servidor de recursos de Liberty para que trabaje con varios emisores de JWT o servidores de proxy de autenticación configurando varios elementos openidConnectClient y varios filtros de autenticación.

    Cada elemento openidConnectClient define una relación de confianza con un emisor de JWT o proxy de autenticación y hace referencia a un filtro de autenticación.

  8. Opcional: Defina las reglas para correlacionar reclamaciones de JWT con sujetos de autenticación.
    El servidor de recursos de Liberty utiliza reclamaciones de JWT para crear sujetos de autenticación y puede definir cómo correlacionan las reclamaciones de JWT con el sujeto en los siguientes atributos del elemento openidConnectClient:
    • userIdentifier
    • userUniqueIdentifier
    • groupIdentifier
    • realmName
    • realmIdentifier
    Si se configura realmName y realmIdentifier, realmName tiene prioridad y realmIdentifier se ignora.
    Si no se define ninguna correlación de reclamación y sujeto, se aplican las siguientes reglas de correlación predeterminadas:
    • La reclamación de sujeto (sub) se utiliza como nombre principal y nombre de seguridad exclusivo del usuario.
    • La reclamación de emisor (iss) es el reino predeterminado y se utiliza como reino de sujeto. Si se incluye una reclamación realmName en la señal JWT, se utiliza la reclamación realmName como reino de sujeto en lugar de la reclamación iss.
  9. Opcional: Configure una cookie de inicio de sesión único. El servidor de Liberty espera cada solicitud para proporcionar una señal JWT válida y no crea ni utiliza cookies de inicio de sesión único para la autenticación. Para crear cookies de inicio de sesión único, establezca authnSessionDisabled="false" en el elemento openidConnectClient.
  10. Opcional: Configure el servidor de Liberty para recibir señales JWT. El cliente web puede utilizar uno de los métodos siguientes para enviar señales JWT en las solicitudes de recursos al servidor de recursos de Liberty. Si se envía una señal JWT en el campo Authorization o en un parámetro de cuerpo de formulario codificado, no se requiere ninguna configuración adicional del servidor adicional.
    Importante: Los clientes no deben utilizar más de un método en cada solicitud para transmitir la señal. Si se ha configurado el atributo headerName, las señales enviadas en el campo de cabecera Authorization o en un parámetro de cuerpo de formulario codificado se ignoran. Si el atributo headerName no está configurado, se buscar primero en la cabecera Authorization, seguido del parámetro access_token.
    • Enviar la señal en el campo de cabecera de solicitud Authorization.
      GET /resource HTTP/1.1
      Host: server.example.com
      Authorization: Bearer mF_9.B5f-4.1JqM
    • Enviar la señal en el cuerpo de entidad de solicitud como un parámetro de cuerpo de formulario codificado.
      POST /resource HTTP/1.1
      Host: server.example.com
      Content-Type: application/x-www-form-urlencoded
      access_token=mF_9.B5f-4.1JqM
    • Enviar la señal en un campo de cabecera de solicitud personalizada configurando un nombre de cabecera de confianza en Liberty.

      Para configurar el nombre de cabecera de confianza, establezca headerName="<myJwtHeaderName>" en el elemento openidConnectClient. Por ejemplo, si establece headerName="jwt", puede enviar la señal en el campo de cabecera jwt tal como se muestra en el ejemplo siguiente:
      GET /resource HTTP/1.1
      Host: server.example.com
      jwt: mF_9.B5f-4.1JqM
  11. Configure las audiencias de JWT. Para definir una lista de audiencias de confianza, configure el atributo audiences en el elemento openidConnectClient.
    Una señal JWT válida debe cumplir una de las condiciones siguientes:
    • Si se ha configurado el atributo audiences, el valor de reclamación de audiencia (aud) debe ser una de las audiencias configuradas. Para ignorar la comprobación de audiencias, establezca audiences en ALL_AUDIENCES.
    • Si no se ha configurado el atributo audiences, pero la señal JWT contiene una reclamación aud que es un URL válido, el URL de servicio de recursos debe tener el valor aud como prefijo.
      Por ejemplo, la audiencia siguiente es válida porque el URL de recursos empieza con el valor de reclamación aud:
      • Reclamación de audiencia: "aud":"https://<servidor>:<puerto>/something"
      • URL de recursos: https://<servidor>:<puerto>/something/specific
      La audiencia siguiente no es válida porque el URL de recursos no empieza con el valor de reclamacón aud.
      • Reclamación de audiencia: "aud":"https://<servidor>:<puerto>/something/specific"
      • URL de recursos: https://<servidor>:<puerto>/something
  12. Opcional: Correlaciones mediante programación las señales JWT con los sujetos implementando la interfaz de programación de servicios (SPI) com.ibm.wsspi.security.oauth.UserCredentialResolver.

    Si desea más información sobre la interfaz, consulte la información de la SPI com.ibm.wsspi.security.oauth.UserCredentialResolver en Interfaces de programación (API y SPI) o en la documentación Java que se proporciona con el producto en el directorio ${wlp.install.dir}/dev/spi/ibm/.

Resultados

Ha creado la configuración mínima necesaria para configurar un servidor de Liberty para aceptar señales JWT como señales de autenticación.

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_sec_config_oidc_jwt
Nombre de archivo:twlp_sec_config_oidc_jwt.html