- 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:
- Luego de crearlo ir a la pestaña Keys y obtener la clave pública RS256 que luego será utilizada en la aplicación:
- Ahora crearemos un cliente que podrá utilizar keycloak junto con su URL de origen:
- Luego creamos un usuario para que acceda a la aplicación:
- También definimos la clave en la pestaña Credentials:
- Agregar un rol (vertx-role) asociado al cliente anteriormente creado:
- En Users ir a Role Mapping, seleccionar el cliente y luego asignar roles:
- Para obtener la configuración de instalación en formato OIDC JSON:
- La estructura del proyecto es simple, el objetivo es demostrar como utilizar keycloak:
- 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):
(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.
- Al ejecutar la aplicación quedará escuchando en el puerto 8080 y la url que probaremos es http://localhost:8080/resources/secure utilizando el método GET (usando RestMan):
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):
(en la imagen no se muestra todo el contenido del token)
- Al intentar acceder a la aplicación (http://localhost:8080/resources/secure) directamente desde el navegador veremos la pantalla de keycloak para realizar el login:
- Luego de ingresar nuestras credenciales podemos acceder al recurso protegido:
- 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