--- categories: security title: HowtoKeycloak ... [Keycloak](https://www.keycloak.org/) est un serveur d'authentification et d'autorisation écrit en Java, c'est un "Identity Access Manager" *IAM* open-source permettant de faire du Single-Sign-On et Single-Sign-Out *SS0*, c'est à dire d'utiliser un seul compte pour se (dé-)connecter à différents services. ## Installation liens : [documentation officielle](https://www.keycloak.org/getting-started/getting-started-zip), [git de keycloak](https://github.com/keycloak/keycloak/releases) Installer Keycloak en dur avec OpenJDK ```{.bash} # apt install openjdk-11-jre ``` Lister les releases ```{.bash} $ git ls-remote --tags https://github.com/keycloak/keycloak ``` Récupérer et extraire le zip de la release souhaité ```{.bash} $ keycloak_release=21.1.1 $ keycloak_zip=keycloak-${keycloak_release}.zip $ wget https://github.com/keycloak/keycloak/releases/download/${keycloak_release}/keycloak-${keycloak_release}.zip $ unzip $keycloak_zip $ keycloak_folder=${keycloak_zip%".zip"} ``` ## Configuration > Note : on peut lancer keycloak en mode *dev* sans aucune configuration pour tester voir [administration](#administration) On supposera que nous nous trouvons dans le dossier d'installation Keycloack ### Créer un administrateur *Ou au lancement du serveur* ```{.bash} export KEYCLOAK_ADMIN= export KEYCLOAK_ADMIN_PASSWORD= bin/kc.sh start-dev ``` *En mode "click"* Se connecter à http://localhost:8080/ et créer un username et password admin Se connecter à http://localhost:8080/admin avec les identifiant admin ### Base de donnée Keycloak en production à besoin d'un accés à une base de donné lien : [documentation keycloak configuration bdd](https://www.keycloak.org/server/db) > Note : par défaut le schéma sera `keyclaok` est utilisé **Mariadb** pour l'installation et la configuration de Mariadb voir [/HowtoMySQL]() Il faut créer une base de donnée et utilisateur associé pour Keycloak ```{.bash} db_name=keycloak user=evocloak # mysqladmin create $db_name # mysql mysql> GRANT ALL PRIVILEGES ON $db_name.* TO '$user'@'%' IDENTIFIED BY '$password'; ``` (Recommandé) Configuration par via fichier configuration Modifier le fichier `conf/keycloak.conf` TODO montrer modif faire etc Ou démarrer le serveur Keycloak en définissant les options de configuration ```{.bash} bin/kc.sh start --db mariadb --db-url-host mymariadb --db-username evocloak --db-password change_me ``` ### Haute disponibilité keycloak est conçu pour fonctionner en haute disponibilitée avec [infinispan](https://infinispan.org/) (In-Memory Distributed Data Store) TODO https://www.keycloak.org/server/configuration-production -> https://www.keycloak.org/server/caching ## Administration Lancer Keycloak en mode *dev*, pour tester Keycloak en http avec des valeurs par defaut ou en mode *prod* ```{.bash} $ cd $keycloak_folder $ bin/kc.sh start-dev $ bin/kc.sh start ``` Voir les option de démarrage / aide ```{.bash} bin/kc.sh start-dev --help bin/kc.sh start --help ``` **Lancer Keycloak** en *dev* sur le port 8080 ```{.bash} keycloak_http_port=8080 bin/kc.sh start-dev --http-port ${keycloak_http_port} ``` ### TODO Build et lancer en mode prod ### Gestion des royaumes "realm" Un royaume est un ensemble isolé d'utilisateurs et d'applications géré par un administrateur Le royaume **master** est seulement utilisé pour gérer Keycloak et ne doit pas être utiliser pour gérer d'autres applications **Tester le fonctionnement des royaume** voir [getting-started-zip](https://www.keycloak.org/getting-started/getting-started-zip) suivre bettement les étapes juqu'a arriver au message "hello, myuser" sur [https://www.keycloak.org/app/](https://www.keycloak.org/app/) **Créer un royaume** Dans le menu déroulant tout en haut à gauche choisir "Create Realm" Choisir un nom de royaume "Realm name" puis le créer avec "Create" **Créer un utilisateur** ATTENTION : nous allons créer un utilisateur dans le royaume sélectionné dans le menu déroulant tout en haut à gauche, sauf cas particulier, il faudra éviter le royaume **master** **Créer client** TODO ajouter nextcloud https://stackoverflow.com/questions/48400812/sso-with-saml-keycloak-and-nextcloud **User Federation** permet d'avoir acces à LDAP et Active Directory TODO Connection au à OpenLDAP https://rob-ferguson.me/keycloak-flowable-and-openldap/ TODO **Identity providers** ## TODO Gestion via la cli :logbook: CLOCK: [2023-06-21 Wed 14:43:19]--[2023-06-21 Wed 15:05:04] => 00:21:45 :END: [documentation keycloak](https://www.keycloak.org/docs/latest/server_admin/#admin-cli) # Ressources https://github.com/thomasdarimont/awesome-keycloak https://rob-ferguson.me/