[16.0.0.3 and later]

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

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

Acerca de esta tarea

Para configurar un servidor Liberty para que acepte 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 esa señal para acceder a los recursos asociados en Liberty. El servidor de recursos Liberty valida la señal JWT y crea el sujeto autenticado de 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 openidConnectClient-1.0 de Liberty y cualquier otra característica necesaria 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". Si desea más información sobre otros atributos openidConnectClient, consulte Cliente de OpenID Connect.

    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, de forma que el servidor Liberty puede realizar conexiones SSL al 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 Liberty para trabajar con varios emisores JWT o autenticar servidores proxy 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 Liberty utiliza reclamaciones JWT para crear sujetos de autenticación, y puede definir cómo correlacionar reclamaciones JWT con el sujeto en los atributos de elemento openidConnectClient siguientes:
    • 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 Liberty espera que cada solicitud proporcione una señal JWT válida y no crea ni utiliza las 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 Liberty para recibir señales JWT. El cliente web puede utilizar uno de los métodos siguientes para enviar señales JWT en solicitudes de recursos al servidor de recursos 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
    • Envíe 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 recurso: 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 recurso: 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 (Javadoc) 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 Liberty para que acepte señales JWT como señales de autenticación.

Icono que indica el tipo de tema Tema de tarea

Nombre de archivo: twlp_sec_config_oidc_jwt.html