Files
varlog/data/5510b12a-d647-4b1a-90ba-d421a4927ff7/index.md
T

108 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
*Keycloak* est un outil puissant pour la gestion des identités et des accès. Dans cet article, nous allons voir **comment configurer un client OAuth 2.0** dans Keycloak, en **détaillant toutes les options importantes**, et en **restreignant laccès aux utilisateurs ou groupes autorisés uniquement**.
---
## 🧱 1. Prérequis
* Un Keycloak fonctionnel (v15+ recommandé)
* Les droits dadministration sur un **realm**
* Une application (client) souhaitant sauthentifier via OAuth 2.0
---
## 🛠️ 2. Création dun client OAuth 2.0
Dans Keycloak, un *client* représente toute application ou service qui souhaite interagir avec le système dauthentification pour authentifier des utilisateurs ou obtenir des informations sur eux. Cela peut être une application web, une API, une application mobile ou encore un service tiers. Le client est en quelque sorte un **consommateur de lidentité**, et cest à travers lui que les échanges avec Keycloak se font.
Chaque client est enregistré dans un *realm* (lespace logique dauthentification dans Keycloak) avec un identifiant unique, appelé `client_id`. Cet identifiant est utilisé par lapplication lorsquelle initie une demande dauthentification ou tente dobtenir un jeton daccès. Un client peut être configuré de différentes manières selon son type et son usage : il peut être **public** (par exemple une application JavaScript qui na pas de secret), **confidentiel** (une application serveur qui possède un secret partagé), ou encore de type **bearer-only**, cest-à-dire une API qui ne déclenche pas elle-même lauthentification mais qui attend des requêtes déjà munies dun jeton.
Dans Keycloak, le client définit les paramètres de sécurité : les flux dauthentification autorisés (code, implicite, mot de passe, client\_credentials), les URL de redirection autorisées, les origines web pour le support CORS, la durée de vie des jetons, ou encore les claims (informations) que lon souhaite injecter dans les tokens.
Un client peut aussi être associé à des rôles spécifiques ou à des scopes personnalisés. Cela permet de gérer les droits daccès de manière fine, en sassurant que seuls certains utilisateurs ou groupes peuvent utiliser une application donnée. Il est également possible de lier des *politiques d'autorisation* à un client pour restreindre dynamiquement laccès selon des règles (groupes, rôles, attributs utilisateur, etc.).
1. Connectez-vous à **Keycloak Admin Console**.
2. Sélectionnez le **realm** cible.
3. Menu **Clients > Create client**.
### Options de base :
| Champ | Description |
| ------------------- | ------------------------------------------------------------------------------- |
| **Client ID** | Identifiant unique du client. Visible dans les tokens. Exemple : `myapp-client` |
| **Client Type** | Choisir `OpenID Connect` |
| **Client Protocol** | Par défaut : `openid-connect` (OAuth 2.0). Alternatif : `saml`. |
| **Root URL** | URL de base de redirection pour les applications web. |
Cliquez sur **Save** pour accéder à toutes les options.
---
## ⚙️ 3. Configuration du client
### A. **Settings**
| Option | Valeur typique | Description |
| ---------------------------- | --------------------------------------- | ------------------------------------------------------------------ |
| **Client Authentication** | ON / OFF | Requiert un secret (ON) ou public (OFF) |
| **Authorization Enabled** | `OFF` par défaut | Activer pour gérer les autorisations internes |
| **Access Type** | `confidential`, `public`, `bearer-only` | Type dapplication (voir plus bas) |
| **Standard Flow Enabled** | ON | Active le flux dautorisation (code) |
| **Implicit Flow Enabled** | OFF (⚠️ déconseillé) | Active le flux implicite |
| **Direct Access Grants** | ON | Permet lauthentification via mot de passe (`grant_type=password`) |
| **Service Accounts Enabled** | ON (si machine to machine) | Utilise le client comme un compte de service |
| **Valid Redirect URIs** | `https://app.example.com/*` | URI(s) autorisées pour les redirections |
| **Web Origins** | `+` ou domaines CORS autorisés | Obligatoire si accès depuis navigateur JS |
| **Base URL** | `https://app.example.com/` | Page par défaut post-login |
| **Admin URL** | Pour backchannel logout | Optionnel |
### B. **Credentials**
* Affiche le **Client Secret** (pour les clients confidentiels).
* Possibilité dutiliser des **JWT signés (client assertion)**.
---
## 🔑 4. Types de clients
| Type | Description |
| ---------------- | ----------------------------------------------------------- |
| **Confidential** | Application backend avec secret. Ex : Web server |
| **Public** | Application JS/mobile sans secret |
| **Bearer-only** | Client backend ninitie pas dauth, mais vérifie les tokens |
---
## 🧑‍🤝‍🧑 5. Restreindre laccès aux utilisateurs/groupes
### A. Méthode recommandée : **Configurer une politique daccès**
1. Activer **Authorization** dans longlet `Settings`.
2. Aller dans longlet **Authorization** > `Authorization settings` > activer `Enable`.
### B. Créer une **policy** :
* **Type** : Group ou Role
* Exemple : `Groupe = /clients/myapp` ou `Role = access-myapp`
### C. Créer une **permission**
* **Type** : Client Scope Permission
* Associer à la **policy** créée
* Appliquer à la ressource “client” ou à des scopes (ex: `openid`, `profile`)
---
## 🔍 7. Options avancées
* **Fine grain session settings** : durée de session, idle timeout
* **Token Settings** : durée de vie des access/refresh tokens
* **Client Scopes** : définir les claims par défaut (email, profile, etc.)
* **Mapper des claims personnalisés** dans les tokens (ex : groupes, fonctions)
* **Backchannel Logout** : URL appelée lors dun logout global
---
## 📌 Conclusion
Configurer un client OAuth 2.0 dans Keycloak permet une **intégration sécurisée** avec vos applications, que ce soit via des **tokens daccès** ou des **scopes personnalisés**. Noubliez pas de **restreindre laccès** au client pour éviter quil soit utilisé par des utilisateurs non autorisés.