Keycloak como JWT provider para MicroProfile

Una de las características incluidas en MicroProfile es la MicroProfile JWT security specification que nos permite implementar seguridad en nuestros servicios utilizando JWT y para poder utilizarlo necesitamos tener nuestro proveedor de JWT, así que en esta entrada mostraré como configurar Keycloak en forma básica para que cumpla esta función.

Lo que realizaremos es lo siguiente:
  • Instalar Keycloak
  • Crear un realm
  • Definir grupos en el realm
  • Crear usuarios asociados a distintos grupos
  • Agregarles atributos a los usuarios
  • Crear un cliente en el realm
  • Crear Mappers
  • Obtener un token
     
    comenzamos...

Instalar Keycloak

Opcion 1:
1- Obtener Keycloak desde su página de descargas.
2- Descomprimirlo y ejecutar el archivo standalone.sh:

keycloak-VERSION/bin/standalone.sh -Djboss.socket.binding.port-offset=1000


Opcion 2:
1- Obtenerlo utilizando docker hub (definir valores para el usuario y clave):

docker run -p 9080:8080 -e KEYCLOAK_USER=<USERNAME> -e KEYCLOAK_PASSWORD=<PASSWORD> jboss/keycloak




  • presionamos Administration Console para llegar al login:

  • ingresamos nuestras credenciales y tenemos la vista de administración:




Crear un realm

  • Presionar add realm:



  • Definimos el nombre del realm y lo creamos (en mi caso es MicroProfile):




  • Después de crearlo tendremos disponible la clave pública que utilizaremos en los clientes del realm:


Definir grupos en el realm


  • Para crear un grupo vamos a las opción Groups:

  • Presionamos New:
 
  • Definimos el nombre y lo guardamos:



 Crear usuarios asociados a grupos 

  • para crear usuarios presionar la opción Users:

 
  • luego add user:


  • definimos los datos de nuestro nuevo usuario:

 
 
  • Después de crearlo le asignamos la contraseña en la pestaña Credentials (deshabilitamos Temporary):

 
  • Luego le asignamos el grupo al usuario creado en la pestaña Groups:

 
  • Presionamos el nombre del grupo y después el botón join:


Agregarles atributos a los usuarios


  • Para agregar un atributo al usuario seleccionamos la pestaña Attributes y los definimos:


Crear un cliente en el realm


  • Para crear el cliente vamos a Clients:

  • y presionamos Create:

 
  • Definimos el id del cliente:

 

Crear Mappers


  • Luego de haberlo creado vamos a la pestaña Mappers y presionamos Create:


  • Definimos el nombre del mapper, y seleccionamos Group Membership en Mapper Type para exponer los grupos que fueron creados. Luego hay que definir el valor groups en Token Claim Name por que es el nombre que será insertado en el token y finalmente dejar en off Full group path para que no le agregue el / del path y deje solo el nombre:


  • Ahora agregaremos un mapper para el atributo personalizado del usuario como lo describe la imagen:


Obtener un token

  • Para obtener un token se puede realizar lo siguiente (cambiando usuario y clave por lo que corresponda):
    curl -s --data "grant_type=password&client_id=cliente-mp&username=sebastian&password=clave" http://localhost:9080/auth/realms/MicroProfile/protocol/openid-connect/token
    

  • la respuesta es algo así (access_token y session_state están acortados):
    {
      "access_token": "ey...6Mg",
      "expires_in": 300,
      "refresh_expires_in": 1800,
      "refresh_token": "eyJhbGciOiJI...YEg",
      "token_type": "bearer",
      "not-before-policy": 0,
      "session_state": "dfdd7b12-fcb6-4250-8ac3-a47edd719d3b",
      "scope": "profile email"
    }
    

  • para validar nuestro token vamos a la pagina https://jwt.io/ y pegamos el contenido de access_token y nos revelará el contenido:




Y eso es todo! Tenemos listo nuestro proveedor de JWT ✌


Enlaces muy importantes para saber de JWT junto a MicroProfile:

No hay comentarios.:

Publicar un comentario