From 2dc470bae6394b6bd082dd355384d5c4999d1e08 Mon Sep 17 00:00:00 2001 From: tdavid Date: Thu, 22 Jun 2023 16:06:45 +0200 Subject: [PATCH] clean up le style --- HowtoKeycloak.md | 218 ++++++++++++++++++++--------------------------- 1 file changed, 94 insertions(+), 124 deletions(-) diff --git a/HowtoKeycloak.md b/HowtoKeycloak.md index b90e332e..2db82f2f 100644 --- a/HowtoKeycloak.md +++ b/HowtoKeycloak.md @@ -1,200 +1,170 @@ # Contexte -- Keycloak 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. +Keycloak 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. -- Keycloak supporte principalement 2 protocoles d'authentification +Keycloak supporte 2 protocoles d'authentification, *SAML 2.0* et *OIDC* - - *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 - -- [featureset et presentation](video https://www.youtube.com/watch?v=FyVHNJNriUQ?=8m30s) +[featureset et presentation](video https://www.youtube.com/watch?v=FyVHNJNriUQ?=8m30s) # Installation ## En dur -- ressources +ressources -- [doc officielle](https://www.keycloak.org/getting-started/getting-started-zip) +[doc officielle](https://www.keycloak.org/getting-started/getting-started-zip) -- [git de keycloak](https://github.com/keycloak/keycloak/releases) +[git de keycloak](https://github.com/keycloak/keycloak/releases) -- Installer OpenJDK +Installer OpenJDK -- - ```bash - apt install openjdk-11-jre - ``` +```bash +apt install openjdk-11-jre +``` -- Lister les release +Lister les release -- - ```bash - git ls-remote --tags https://github.com/keycloak/keycloak - ``` +```bash +git ls-remote --tags https://github.com/keycloak/keycloak +``` -- Récupérer et extraire le zip de la release souhaité +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 - ``` +```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 +Lancer keycloak depuis son dossier -- - ```bash - keycloak_folder=${keycloak_zip%".zip"} - cd $keycloak_folder - bin/kc.sh start-dev - ``` +```bash +keycloak_folder=${keycloak_zip%".zip"} +cd $keycloak_folder +bin/kc.sh start-dev +``` ## Brancher une base de donnée de prod -- [doc officielle configuration db](https://www.keycloak.org/server/db) +[doc officielle configuration db](https://www.keycloak.org/server/db) -- Par defaut le schema `keyclaok` est utilisé +Par defaut le schema `keyclaok` est utilisé -- **Mariadb** +**Mariadb** -- pour l'installation et plus de détails coir la [doc evolix installation de mariadb](https://wiki.evolix.org/HowtoMySQL) +pour l'installation et plus de détails coir la [doc evolix installation de mariadb](https://wiki.evolix.org/HowtoMySQL) -- (Recommandé )créer une base de donnée et utilisateur associé pour keycloak voir +(Recommandé )créer une base de donnée et utilisateur associé pour keycloak voir - - - ```bash - db_name=keycloak - user=evocloak - # mysqladmin create $db_name - # mysql - mysql> GRANT ALL PRIVILEGES ON $db_name.* TO '$user'@'%' IDENTIFIED BY '$password'; - ``` +```bash +db_name=keycloak +user=evocloak +# mysqladmin create $db_name +# mysql +mysql> GRANT ALL PRIVILEGES ON $db_name.* TO '$user'@'%' IDENTIFIED BY '$password'; +``` -- Démarrer le serveur keycloak et (re-)définit les options de configuration (depuis le dossier keycloak) +Démarrer le serveur keycloak et (re-)définit les options de configuration (depuis le dossier keycloak) - - - ```bash - bin/kc.sh start --db mariadb --db-url-host mymariadb --db-username evocloak --db-password change_me - ``` +```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) +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 +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 +On supposera que nous nous trouvons dans le dossier d'installation keycloack - - - ```bash - cd $keycloak_folder - ``` +```bash +cd $keycloak_folder +``` -- Voir les option de démarrage / aide +Voir les option de démarrage / aide - - - ```bash - bin/kc.sh start-dev --help - ``` +```bash +bin/kc.sh start-dev --help +``` -- **Lancer Keycloak** +**Lancer Keycloak** - - Lancer Keycloak en *dev* sur le port 8080 +Lancer Keycloak en *dev* sur le port 8080 - - - ```bash - $keycloak_http_port=8080 - bin/kc.sh start-dev --http-port ${keycloak_http_port} - ``` +```bash +$keycloak_http_port=8080 +bin/kc.sh start-dev --http-port ${keycloak_http_port} +``` -- **Créer un administrateur** +**Créer un administrateur** - - Au lancement du serveur +Au lancement du serveur - - - ```bash - export KEYCLOAK_ADMIN= - export KEYCLOAK_ADMIN_PASSWORD= - bin/kc.sh start-dev - ``` +```bash +export KEYCLOAK_ADMIN= +export KEYCLOAK_ADMIN_PASSWORD= +bin/kc.sh start-dev +``` - - En mode "click" +En mode "click" - - Se connecter à http://localhost:8080/ +Se connecter à http://localhost:8080/ - - Créer un username et password admin +Créer un username et password admin - - Se connecter à http://localhost:8080/admin avec les identifiant admin - id:: 6491bb83-8229-4bcd-a535-5c8da9f0e556 +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) +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 +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 +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 +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) +**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/) +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** +**Créer un royaume** - - Dans le menu déroulant tout en haut à gauche choisir "Create Realm" +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" +Choisir un nom de royaume "Realm name" puis le créer avec "Create" -- **Créer un utilisateur** +**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** +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** +**Créer client** - - TODO ajouter nextcloud https://stackoverflow.com/questions/48400812/sso-with-saml-keycloak-and-nextcloud +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/ +**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 **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: -- [doc](https://www.keycloak.org/docs/latest/server_admin/#admin-cli) +[doc](https://www.keycloak.org/docs/latest/server_admin/#admin-cli) # Ressources -- https://github.com/thomasdarimont/awesome-keycloak - -- https://rob-ferguson.me/ +https://github.com/thomasdarimont/awesome-keycloak +https://rob-ferguson.me/