[16.0.0.4 and later]

Creación de JWT (JSON Web Tokens) en Liberty

Puede crear mediante programación señales JWT (JSON Web Token) configurando el elemento compilador JWT en la configuración del servidor e implementar las API com.ibm.websphere.security.jwt.JwtBuilder y com.ibm.websphere.security.jwt.JwtToken en las aplicaciones.

Acerca de esta tarea

Para obtener información sobre las API de JWT, consulte la documentación de Java para JSON Web Token o la documentación de API que se incluye en el producto en el directorio ${wlp.install.dir}/dev.

Procedimiento

  1. [18.0.0.1 and later]Obtenga señales JWT del punto final de de generación de señal JWT.
    1. Obtenga señales con un punto final de la característica jwt-1.0 sin programación.
    2. Autentique sus credenciales para acceder al punto final en https://<host>:<puerto>/jwt/api/ibm/<IdConfig>/token si no ha incluido credenciales en la solicitud. Una vez que la autenticación se ha realizado correctamente, una señal en formato MP-JWT se devuelve en formato JSON. La señal contiene el usuario y los grupos para el usuario tal como se han registrado en el registro de usuarios del servidor.
    3. Establezca otros atributos de señal, como por ejemplo el emisor y la hora de caducidad, desde los atributos del elemento JWTBuilder en el archivo server.xml con el ID <IdConfig> .
    4. Si no define elementos JWTBuilder en el archivo server.xml, utilice defaultJWT como el ID <IdConfig>. Busque los atributos de configuracion del compilador JWT disponibles en jwtBuilder - Compilador JWT (jwtBuilder).
  2. Compilar JSON Web Tokens en Liberty mediante programa.
  3. En el archivo server.xml, añada la característica jwt-1.0.
    <featureManager>
        <feature>jwt-1.0</feature>
        ...
    </featureManager>
  4. Configure el compilador JWT modificando el elemento jwtBuilder.

    Para obtener información sobre los atributos jwtBuilder que puede configurar, consulte JWT Builder (jwtBuilder).

    Cuando añade la característica jwt-1.0 y guarda los cambios, Liberty añade el siguiente elemento jwtBuilder predeterminado.
    <jwtBuilder id="defaultJWT">
    </jwtBuilder>
    En esta configuración predeterminada, se presuponen los valores siguientes:
    • La reclamación exp es 2 horas después de la hora de creación de la señal. Puede configurar este valor en el atributo expiry.
    • La reclamación iss se establece en https://<nombre_host>:<puerto_ssl>/jwt/defaultJWT. Configure el emisor en el atributo issuer.
    • El JWT se firma utilizando el algoritmo RS256 con una clave privada del almacén de claves predeterminado del servidor. Esta configuración presupone que hay un almacén de claves predeterminado para el servidor, que el almacén de claves predeterminado contiene una única clave privada y que la clave privada se puede utilizar para firmar. Si especifica un almacén de claves diferente en el atributo keyStoreRef, se utiliza la clave privada del almacén de claves especificado. Si no se ha configurado el atributo keyAlias y el almacén de claves sólo contiene una clave privada, se utiliza esta clave privada en la firma.

    Puede reconfigurar este elemento jwtBuilder predeterminado o crear uno o más elementos jwtBuilder. Cada elemento jwtBuilder debe tener una serie de URL segura especificada como el atributo id. Si falta el ID, el jwtBuilder no se procesa.

    Si la señal JWT se ha firmado utilizando el algoritmo RS256, puede configurar el compilador JWT para que se firme la señal JWT con JWK (JSON Web Key) estableciendo jwkEnabled="true". Cuando JWK está habilitado, el compilador JWT genera dinámicamente pares de claves y firma la señal JWT con la clave privada. Para validar la firma, el consumidor de JWT puede recuperar la clave de la API de JWK, que tiene el formato siguiente:
    https://<nombre_host>:<puerto_ssl>/jwt/ibm/api/<id_configuración_jwtBuilder>/jwk
  5. Cree mediante programación señales JWT implementando las API com.ibm.websphere.security.jwt.JwtBuilder y com.ibm.websphere.security.jwt.JwtToken en la aplicación.

    Para obtener más información, consulte la documentación de Java para JSON Web Token.

    1. Cree un objeto JwtBuilder.
      Si no especifica un ID de configuración, el objeto se vincula a la configuración de jwtBuilder predeterminada.
      com.ibm.websphere.security.jwt.JwtBuilder jwtBuilder = JwtBuilder.create();
      Si se especifica un ID de configuración, el objeto se vincula a la configuración de jwtBuilder con el ID especificado.
      com.ibm.websphere.security.jwt.JwtBuilder jwtBuilder = JwtBuilder.create("id_configuración_jwtBuilder");
    2. Modifique las reclamaciones en la señal.
      • Añadir o actualizar una reclamación: jwtBuilder.claim("nombre_reclamación", "valor_reclamación");
        jwtBuilder.claim("role", "monitor");
      • Suprimir una reclamación: jwtBuilder.remove("nombre_reclamación");
        jwtBuilder.remove("role");
      • Obtener una reclamación del registro de usuarios federados de Liberty: jwtBuilder.fetch("nombre_atributo");

        Esta llamada de obtención indica al objeto JwtBuilder que busque en el registro de usuarios federados el nombre de usuario identificado por la reclamación sub de JWT. El objeto JwtBuilder obtiene el valor del atributo especificado y crea una nueva reclamación basada en ese atributo. El nombre de la nueva reclamación se establece en el nombre de atributo y el valor de la nueva reclamación se establece en el valor de atributo.

      • Copiar una reclamación de un objeto JWT o JSON existente: jwtBuilder.claimFrom(JSON_o_JWT, "nombre_reclamación");
    3. Modifique el algoritmo de firma y la clave de firma configurados.
      jwtBuilder.signWith("nuevo_algoritmo", nueva_clave);
    4. Cree la señal utilizando la API com.ibm.websphere.security.jwt.JwtToken.
      JwtToken jwtToken = jwtBuilder.buildJwt();
      String jwtTokenString = jwtToken.compact();

Ejemplos de API de JSON Web Token

En el ejemplo siguiente se crea una nueva JWT.
JwtBuilder jwtBuilder = JwtBuilder.create();
jwtBuilder.subject("tom@op.com").claim(Claims.AUDIENCE, "https://acme.com/rs").claim("iss","https://sso.com/ibm/op" ).claim("scope", "impersonator monitor").claim("uid", "hasys123haksiqws");
JwtToken goToken = jwtBuilder.buildJwt();
La JWT resultante se firma con la clave privada predeterminada del servidor y contiene las reclamaciones siguientes.
{
"aud": "https://acme.com/rs",
"iss": "https://sso.com/ibm/op",
"iat": 1388440863, "exp": 1388444763,
"uid": "hasys123haksiqws",
"sub": "tom@op.com",
"scope": "impersonator monitor"
}
En el ejemplo siguiente se crea la JWT newToken JWT a partir de otra JWT, goToken.
JwtToken newToken = JwtBuilder.create().claim(Claims.AUDIENCE, "https://acme.com/rs").claimFrom(goToken, "sub").claim(goToken, "uid").claim(goToken, "scope").buildJwt();

Icono que indica el tipo de tema Tema de tarea

Nombre de archivo: twlp_sec_build_jwt.html