¿Cómo desarrollar con Keycloak en local?
Introducción
En esta guía, configuraremos Keycloak en un entorno local sin utilizar Docker para su integración con Plataforma.
Descarga y setup del código fuente
El primer paso será descargarse la versión 21.1.1 de keycloak a través de este enlace: https://github.com/keycloak/keycloak/releases/download/21.1.1/keycloak-21.1.1.zip
Una vez se haya descargado el archivo .zip, extraemos la carpeta. Dentro de la carpeta keycloak 21.1.1 encontramos diferentes archivos y carpetas. En el directorio de /config añadiremos (y reemplazaremos si es necesario) los siguientes archivos: keycloak.conf y quarkus.properties.
El siguiente paso será copiar la carpeta /theme del directorio /tools/keycloak/server, ubicado en la ruta donde está descargado el código fuente de Plataforma.
Nos volvemos a situar en la carpeta Keycloak y borramos el directorio /themes. Pegamos la carpeta theme que copiamos anteriormente, y modificamos el nombre de la carpeta para añadirle una “s” al final.
Los archivos keycloak.conf y quarkus.properties configuran aspectos clave del servidor, como las propiedades de base de datos y comportamiento general. Los archivos .ftl del directorio /themes personalizan las páginas de inicio de sesión para adaptarlas al diseño y flujo deseados.
A continuación, abrimos una consola de comandos y nos situamos en el repositorio de Plataforma, exactamente en /tools/keycloak/onesaitplatform-keycloak-storage-provider. Vamos a compilar con Maven con el siguiente comando: mvn clean package -Ddialect=org.hibernate.dialect.MySQL5InnoDBDialect.
Cuando haya terminado este proceso, en el explorador de archivos, accedemos a la carpeta /target de onesaitplatform-keycloak-storage-provider para copiar el .jar que se ha generado en la compilación. Este archivo lo pegamos en el directorio /providers de la carpeta de Keycloak.
Iniciar Keycloak
Con estos pasos, hemos completado la configuración inicial y estamos listos para iniciar Keycloak. Para ello, abrimos la consola de comandos, nos posicionamos en la ruta donde esté nuestra carpeta de Keycloak y lanzamos este comando: bin\kc.bat start-dev.
Con el Keycloak corriendo accedemos a esta url: http://localhost:8080/auth. El primer paso es crearnos la cuenta de administrador, un ejemplo de credenciales puede ser: admin / admin. Esto se hace en el primer bloque, si es la primera vez que accedes, aparecerá un pequeño form a cumplimentar con el nombre de usuario y la contraseña.
Desarrollo sobre librerías Java plataforma
A continuación, desde Eclipse, importamos los proyectos Maven de las librerías onesaitplatform-keycloak-storage-provider y onesaitplatform-keycloak-manager desde la ruta donde tenemos descargado el código fuente de plataforma: tools/keycloak/onesaitplatform-keycloak-manager y tools/keycloak/onesaitplatform-keycloak-storage-provider. Una vez importado el keycloak-manager es posible que se muestre un error de una dependencia de onelog. Se resuelve actualizando en su pom.xml la versión de plataforma a aquella con la que estamos trabajando en local.
Por otro lado, en el application.yml del keycloak-manager tenemos que modificar la propiedad onesaitplatform.apiKey. Para ello, abrimos un cliente de base de datos (como heidiSQL a través del comando ConfigDB.browser, por ejemplo) y visualizamos los datos de la tabla user-token dentro de la base de datos de Plataforma (onesaitplatform-config).
Copiamos el token del usuario platform_admin y lo sustituimos por el valor de la propiedad onesaitplatform.apiKey.
Del mismo modo, volvemos a la tabla y copiamos el token del usuario administrator. En Eclipse, abrimos el fichero sso_extras.properties del proyecto plugin-security-keycloak y sustituimos la propiedad api-key por el token que acabamos de copiar de la tabla.
En el application.yml de onesaitplatform-controlpanel, nos aseguramos que las propiedades onesaitplatform.authentication.oauth.enabled y onesaitplatform.authentication.oauth.osp-keycloak estén marcadas como true, pues estos valores permiten la habilitación de Keycloak como Identity Manager.
Una vez hecho esto vamos a levantar primero el control-panel y después el keycloak-manager, que se encargará de crear en Keycloak el Realm por defecto de OnesaitPlatform con los roles de plataforma. Una vez haya creado todo y si no ha dado ningún error, podemos cerrar ya el keycloak-manager.
Ahora accedemos a http://localhost:18000/controlpanel/ e ingresamos las credenciales de un usuario de Plataforma, ya podremos hacer login en el control panel utilizando Keycloak como Identity Manager en local y sin Docker.
Debugear las librerías Java
Para debugear debemos seleccionar la opción de remote debug desde el eclipse y haber levantado el keycloak en modo debug:
Linux/Mac
./bin/kc.sh start-dev --debug 8082
Windows
bin/kc.bat start-dev --debug 8082
Crear un tema custom
https://www.keycloak.org/docs/latest/server_development/#creating-a-theme
Podemos partir de ese tema, renombrando la carpeta y copiándolo en la carpeta themes/ del directorio de keycloak.
Por ejemplo:
Y para seleccionar este tema, accederíamos a la consola http://localhost:8080/auth , nos logamos, y en el menú “Realm settings → Themes” seleccionamos el nuevo tema: