diff --git a/HowtoKeycloak.md b/HowtoKeycloak.md new file mode 100644 index 00000000..14ac3255 --- /dev/null +++ b/HowtoKeycloak.md @@ -0,0 +1,177 @@ +# Contexte + +Keycloak est un Identity Access Manager *IAM* open-source permettant de faire du Single-Sign-On *SS0*, c'est à dire d'utiliser un seul compte pour se connecter à différents services. + +Keycloak supporte principalement 2 protocoles d'authentification + +- *SAML 2.0* (Security Assertion Markup Language) + + - authentification de l'utilisateur + + - SAML assertion (XML signé numeriquement par le royaume) contenant les information sur les accés de l'utilisateur + + - accés au service + + - via un SAML assertion + +- *OIDC* (OpenID Connect) + + - authentification de l'utilisateur + + - -> identity token : infos utilisateur qui l'indentifie + + - -> access token : information sur les accés de l'utilisateur, signé numeriquement par le royaume + + - accés au service + + - via un access token + +# Installation + +## En dur + +- ressources + + - [doc officielle](https://www.keycloak.org/getting-started/getting-started-zip) + + - [git de keycloak](https://github.com/keycloak/keycloak/releases) + +- Installer OpenJDK + + - + ```bash + apt install openjdk-11-jre + ``` + +- Lister les release + + - + ```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 + ``` + +- Lancer keycloak depuis son dossier + + - + ```bash + keycloak_folder=${keycloak_zip%".zip"} + cd $keycloak_folder + bin/kc.sh start-dev + ``` + +## Brancher une base de donnée de prod + +- [doc officielle](https://www.keycloak.org/server/db) + +- **Mariadb** + + - Démarrer le serveur keycloak et (re-)définit les options de configuration + + - + ```bash + bin/kc.sh start --db mariadb --db-url-host mymariadb --db-username myuser --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 + +# Utilisation + +## Administration de Keycloak + +- On supposera que nous nous trouvons dans le dossier d'installation keycloack + + - + ```bash + cd $keycloak_folder + ``` + +- Voir les option de démarrage / aide + + - + ```bash + bin/kc.sh start-dev --help + ``` + +- **Lancer Keycloak** + + - Lancer Keycloak en *dev* sur le port 8080 + + - + ```bash + $keycloak_http_port=8080 + bin/kc.sh start-dev --http-port ${keycloak_http_port} + ``` + +- **Créer un administrateur** + + - 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/ + + - Créer un username et password admin + + - Se connecter à http://localhost:8080/admin avec les identifiant admin + id:: 6491bb83-8229-4bcd-a535-5c8da9f0e556 + + - TODO suite avec capture d'ecran ? sinon voir [doc officielle](https://www.keycloak.org/getting-started/getting-started-zip) + +## Gestion des royaumes "realm" + +- Se connecter à http://localhost:8080/admin avec les identifiant admin + +- 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** + + - TODO finir + +- TODO **Créer client** + +## 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: + +- [doc](https://www.keycloak.org/docs/latest/server_admin/#admin-cli) + +# Ressources + +https://github.com/thomasdarimont/awesome-keycloak +