
---
  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/

