wiki/HowtoKeycloak.md
2023-06-23 15:54:45 +02:00

166 lines
4.7 KiB
Markdown

---
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=<username>
export KEYCLOAK_ADMIN_PASSWORD=<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/