diff --git a/HowtoKeycloak.md b/HowtoKeycloak.md index 14ac3255..b90e332e 100644 --- a/HowtoKeycloak.md +++ b/HowtoKeycloak.md @@ -1,30 +1,32 @@ # 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 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 principalement 2 protocoles d'authentification -- *SAML 2.0* (Security Assertion Markup Language) + - *SAML 2.0* (Security Assertion Markup Language) - - authentification de l'utilisateur + - authentification de l'utilisateur - - SAML assertion (XML signé numeriquement par le royaume) contenant les information sur les accés 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 + - accés au service - - via un SAML assertion + - via un SAML assertion -- *OIDC* (OpenID Connect) + - *OIDC* (OpenID Connect) - - authentification de l'utilisateur + - authentification de l'utilisateur - - -> identity token : infos utilisateur qui l'indentifie + - -> identity token : infos utilisateur qui l'indentifie - - -> access token : information sur les accés de l'utilisateur, signé numeriquement par le royaume + - -> access token : information sur les accés de l'utilisateur, signé numeriquement par le royaume - - accés au service + - accés au service - - via un access token + - via un access token + +- [featureset et presentation](video https://www.youtube.com/watch?v=FyVHNJNriUQ?=8m30s) # Installation @@ -32,55 +34,70 @@ Keycloak supporte principalement 2 protocoles d'authentification - 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 - - - ```bash - apt install openjdk-11-jre - ``` +- + ```bash + apt install openjdk-11-jre + ``` - 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é - - - ```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 - - - ```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](https://www.keycloak.org/server/db) +- [doc officielle configuration db](https://www.keycloak.org/server/db) + +- Par defaut le schema `keyclaok` est utilisé - **Mariadb** - - Démarrer le serveur keycloak et (re-)définit les options de configuration +- pour l'installation et plus de détails coir la [doc evolix installation de mariadb](https://wiki.evolix.org/HowtoMySQL) - - - ```bash - bin/kc.sh start --db mariadb --db-url-host mymariadb --db-username myuser --db-password change_me - ``` +- (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'; + ``` + +- 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 + ``` ## Haute disponibilité @@ -160,18 +177,24 @@ Keycloak supporte principalement 2 protocoles d'authentification - 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 +- **Créer client** -- TODO **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: - [doc](https://www.keycloak.org/docs/latest/server_admin/#admin-cli) # Ressources -https://github.com/thomasdarimont/awesome-keycloak +- https://github.com/thomasdarimont/awesome-keycloak + +- https://rob-ferguson.me/ +