Seguici su:

Keycloak Mysql usando jboss-cli.sh

Keycloak Mysql usando jboss-cli.sh

Configurare Mysql per Keyclaok tramite il client di keycloak: jboss-cli.sh. Questo metodo ci permetterà con pochi comandi di configurare direttamente aggiunge il connettore come modulo di keycloak e settando sempre tramite jboss-cli.sh il datasource all’interno del file standalone.xml per usare come database Mysql su Keycloak. Prima di tutto scarichiamo e installiamo Keyycloak (la versione attuale è la 3.4.3) ed estraiamolo in una cartella, io usero la directory home ( ~/ ) del mio utente tutorial4dev.

wget https://downloads.jboss.org/keycloak/3.4.3.Final/keycloak-3.4.3.Final.tar.gz

tar -xvf keycloak-3.4.3.Final.tar.gz

Ora scarichiamo il connettore JDBC di Mysql ed estraiamolo nella directory home

wget -P ~/ https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.45.tar.gz 

tar -xvf mysql-connector-java-5.1.45.tar.gz

Ora andiamo nella directory bin di keycloak e lanciamo lo script che crea un nuovo utente amministratore

./add-user-keycloak.sh -u tutorial4dev

Con questo script creaimo un nuovo utente amministratore di keycloak e con l’opzione -u scegliamo il nome utente. Scegkliamo la password è  lanciamo keycloak tramite il comando

./standalone.sh

andiamo sulla pagina http://localhost:8080/auth/admin  ed effettuiamo il login con le credenziali appena create. Ora keycloak utilizza il suo database di default H2.

lasciamo keycloak avviato e apriamo un’altra shell per usare il client jboss-cli.sh che ci servirà per settare il connettore JDBC di Mysql e il datasource nel file standalone.xml. Eseguiamo jboss-cli.sh con l’opzione –connect per connetterci a keycloak. Ci verrà mostrata la seguente shell indicandoci che è connessa a keycloak [standalone@localhost:9990 /]

Ora lanciamo il seguente comando:

module add --module-root-dir=~/keycloak-3.4.3.Final/modules/system/layers/keycloak/ --name=com.mysql  --dependencies=javax.api,javax.transaction.api --resources=~/mysql-connector-java-5.1.45/mysql-connector-java-5.1.45-bin.jar

Questo comando serve per aggiungere un modulo locale a keycloak ( o wildfly ) in questo caso crea le cartelle com mysql e main, copia al loro interno il connettore JDBC e crea il file module.xml.

--module-root-dir indica il path assoluto del modulo, in pratica dove andarlo a creare

--name=com.mysql il nome da inserire nel file standalone.xml

--dependencies le dipendenze del modulo che stiamo installando

--resources le risorse ossia la libreria .jar che in questo caso è il connettore mysql

Fatto questo possiamo verificare che il modulo sia stato nella directory /module/system/layers/keycloak/com/mysql/main di keycloak. Ora dobbiamo settare il driver all’interno del file standalone.xml. per fare queasto usiamo un altro comando del client jboss-cli.sh

/subsystem=datasources/jdbc-driver=mysql:add(driver-module-name=com.mysql,driver-name=mysql,driver-class-name=com.mysql.jdbc.Driver)

Questo comando aggiunge le seguneti righe nel file standalone.xml

...
<driver name="mysql" module="com.mysql">
   <driver-class>com.mysql.jdbc.Driver</driver-class>
</driver>
...

Se vogliamo rimuoverle possiamo usare questo comando

/subsystem=datasources/jdbc-driver=mysql:remove

Ora che abbiamo settato i driver dobbiamo configurare il datasource quindi indirizzo del server mysql, nome utente password e nome del database.

Creiamo per prima cosa il database in mysql che userà keycloak con i seguenti comandi

mysql -uroot -p

CREATE USER 'keycloak'@'%' IDENTIFIED BY 'keycloak';

CREATE DATABASE keycloak CHARACTER SET utf8 COLLATE utf8_unicode_ci;

GRANT ALL PRIVILEGES ON keycloak.* TO 'keycloak'@'%';

Ora eseguiamo il seguente comando che crea il datasource nel file standalone.xml

/subsystem=datasources/data-source=KeycloakMysqlDS:add(jndi-name=java:jboss/datasources/KeycloakMysqlDS, driver-name=mysql, connection-url="jdbc:mysql://localhost:3306/keycloak?useSSL=false&characterEncoding=UTF-8",user-name=keycloak, password=keycloak, max-pool-size=15, min-pool-size=5)

Questo comando crea il seguente datasource nel file standalone.xml

<datasource jndi-name="java:jboss/datasources/KeycloakMysqlDS" pool-name="KeycloakMysqlDS">
   <connection-url>jdbc:mysql://localhost:3306/keycloak</connection-url>
   <driver>mysql</driver>
   <pool>
      <min-pool-size>5</min-pool-size>
      <max-pool-size>15</max-pool-size>
   </pool>
   <security>
      <user-name>keycloak</user-name>
      <password>keycloak</password>
   </security>
</datasource>

Se vogliamo rimuovere il datasource appena creato lanciamo il seguente comando

data-source remove --name=KeycloakMysqlDS

Ora che abbiamo creato il datasource  (KeycloakMysqlDS)  lo dobbiamo abilitare per far si che keycloak utilizzi questo e non il suo di default. Rimuoviamo spi ed aggiungiamo il nuovo appena creato

/subsystem=keycloak-server/spi=connectionsJpa/provider=default/:add(properties={dataSource => "java:jboss/datasources/KeycloakMysqlDS",initializeEmpty => "true",migrationStrategy => "update",migrationExport => "${jboss.home.dir}/keycloak-database-update.sql"},enabled=true)
Pasquale Guarino

pasquale.guarino80@gmail.com