Skip to content

sebastian4j/vertx-keycloak-jwt

Repository files navigation

Vert.x con recursos seguros utilizando Keycloak, Roles y JWT

Configuración Keycloak

Utilizando Vert.x

Redis

Configuración Keycloak

  • Ejecutar la imagen docker de keycloak utilizando el puerto local 8282 y el usuario y clave admin:

docker run -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin -p 8282:8080 jboss/keycloak

  • Acceder desde el navegador a http://localhost:8282/ y luego ingresar a la opción Add realm para crear el ream vertx:

Alt text

Alt text

  • Luego de crearlo ir a la pestaña Keys y obtener la clave pública RS256 que luego será utilizada en la aplicación:

Alt text

Alt text

  • Ahora crearemos un cliente que podrá utilizar keycloak junto con su URL de origen:

Alt text

  • Luego creamos un usuario para que acceda a la aplicación:

Alt text

  • También definimos la clave en la pestaña Credentials:

Alt text

  • Agregar un rol (vertx-role) asociado al cliente anteriormente creado:

Alt text

  • En Users ir a Role Mapping, seleccionar el cliente y luego asignar roles:

Alt text

  • Para obtener la configuración de instalación en formato OIDC JSON:

Alt text

Utilizando Vertx

  • La estructura del proyecto es simple, el objetivo es demostrar como utilizar keycloak:

Alt text

  • El archivo config.json contiene datos de configuración para acceder a keycloak (este modo de configuración es opcional, se puede omitir el ConfigRetriever y crear un JsonObject en el código con la configuración necesaria del keycloak):

Alt text

(solo muestro en la imagen los datos relacionados con keycloak)

realm: el nombre del realm creado inicialmente.

realm-public-key: contenido de la clave pública.

auth-server-url: url de keycloak que autenticará.

resource: nombre del cliente que creamos.

utilizar la documentación de referencia para consultar las definiciones.

Alt text

al intentar acceder al recurso obtenemos el código de respuesta 401

  • Para poder acceder tenemos que solicitar un token de acceso a keycloak con el usuario, clave y realm que creamos:

curl -s --data "grant_type=password&client_id=vertx&username=usuario&password=clave" http://localhost:8282/auth/realms/vertx/protocol/openid-connect/token

al ejecutarlo correctamente obtenemos un json que contiene la clave access_token (entre otras) con el contenido del token que necesitamos.

  • Ahora con el token volvemos a realizar el request al recurso protegido utilizando token authentication (agregando el header Authorization y el tipo Bearer junto al token):

Alt text

(en la imagen no se muestra todo el contenido del token)

Alt text

  • Luego de ingresar nuestras credenciales podemos acceder al recurso protegido:

Alt text

Redis

  • Agregado redis para uso clave/valor, las claves utilizadas son:

keycloak/realm/vertx/public-key: contenido de la clave publica para el cliente keycloak

keycloak/auth/url: url para autorizar con keycloak

anteriormente se encontraban dentro del json de configuración.

  • Para ejecutar el proyecto requiere las siguientes variables de ambiente:

redis_host: host de redis (localhost)

redis_port: puerto de redis (6379)

nombre: nombre del servicio

puerto: puerto para escuchar con vertx

host: host que usara vertx

  • Tests agregados (el comienzo) 😏

  • Ejecución de scripts:

compilar.sh

consul/lanzar.sh

lanzar.sh

raznal.sh

login.sh $usuario $password

raznal.sh y lanzar.sh permiten registrar el servicio 2 veces en redis

TODO: integrar Docker, mensajes con Kafka, registro de servicios con Redis, Testing

Releases

No releases published

Packages

No packages published