Puede crear mediante programación señales JWT (JSON Web Token) configurando el
elemento creador de 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
- En el archivo server.xml, añada la característica
jwt-1.0.
<featureManager>
<feature>jwt-1.0</feature>
...
</featureManager>
- Configure el creador de JWT modificando el elemento jwtBuilder.
Para obtener información sobre los atributos jwtBuilder que puede configurar,
consulte Compilador JWT (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 creador de JWT
para que se firme la señal JWT con JWK (JSON Web Key) estableciendo
jwkEnabled="true". Cuando JWK está habilitado, el creador de 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
- 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.
- 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");
- 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");
- Modifique el algoritmo de firma y la clave de firma configurados.
jwtBuilder.signWith("nuevo_algoritmo", nueva_clave);
- 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();