Votre panier est vide!

🟡 Niveau : Intermédiaire à Avancé | ⏱️ Lecture : 16 min | 🛠️ Mise en œuvre : 3-6 heures
📚 Prérequis
- Docker installé et fonctionnel
- Compréhension des concepts d’authentification (sessions, tokens)
- Un nom de domaine avec certificat SSL (pour la production)
- PostgreSQL disponible (recommandé pour la HA)
Combien de formulaires de login différents vos utilisateurs doivent-ils gérer ? Combien de bases de données contiennent des mots de passe hashés ? Le Single Sign-On (SSO) résout ce problème en centralisant l’authentification. Keycloak est la solution open-source de référence pour l’IAM (Identity and Access Management). Découvrons comment il fonctionne et comment l’intégrer.
🤔 Pourquoi Centraliser l’Authentification ?
Sans SSO, chaque application gère ses propres utilisateurs :
- ❌ L’utilisateur a 10 mots de passe différents
- ❌ Chaque équipe implémente sa propre auth (avec ses bugs)
- ❌ Impossible d’appliquer une politique de sécurité uniforme
- ❌ Onboarding/Offboarding cauchemardesque
- ❌ Pas de 2FA généralisé
Avec un SSO comme Keycloak :
- ✅ Un seul login pour toutes les applications
- ✅ Politiques de mot de passe centralisées
- ✅ 2FA/MFA en un clic pour tous
- ✅ Audit trail unifié
- ✅ Désactivation instantanée d’un compte = accès révoqué partout
🔄 OIDC vs SAML : Quel Protocole Choisir ?
Keycloak supporte les deux standards majeurs. Voici comment choisir :
OpenID Connect (OIDC)
C’est une couche d’identité au-dessus d’OAuth 2.0. C’est le standard moderne.
- ✅ Simple à implémenter (JSON, REST)
- ✅ Parfait pour les SPA, applications mobiles, APIs
- ✅ Tokens JWT auto-suffisants
- ✅ Support natif dans la plupart des frameworks modernes
Cas d’usage : Applications web modernes, microservices, APIs REST.
SAML 2.0
Standard plus ancien basé sur XML, encore très utilisé en entreprise.
- ✅ Supporté par les applications legacy (Salesforce, ServiceNow…)
- ✅ Fédération d’identité entre organisations
- ❌ Plus complexe à debugger (XML)
- ❌ Moins adapté aux applications mobiles
Cas d’usage : Intégration avec des SaaS entreprise, fédération inter-entreprises.
Recommandation
Utilisez OIDC par défaut pour les nouvelles applications. Réservez SAML aux intégrations legacy qui l’exigent.
🏗️ Concepts Clés de Keycloak
Realm
Un Realm est un espace isolé contenant ses propres utilisateurs, rôles et configurations. C’est comme un tenant dans une application multi-tenant.
master: Realm d’administration (ne pas y mettre d’utilisateurs métier)monentreprise: Votre realm de production
Client
Chaque application qui délègue son authentification à Keycloak est un Client. Exemple :
- Client « app-frontend » (SPA React)
- Client « app-backend » (API REST)
- Client « grafana » (Dashboard monitoring)
Rôles et Groupes
- Roles : Permissions (admin, editor, viewer)
- Groups : Regroupement d’utilisateurs qui héritent de rôles
🔧 Intégrer Keycloak avec une Application
Exemple avec une Application Node.js (Express)
npm install express-openid-connect
const { auth } = require('express-openid-connect');
const config = {
authRequired: false,
auth0Logout: true,
baseURL: 'https://myapp.example.com',
clientID: 'my-app-client',
issuerBaseURL: 'https://keycloak.example.com/realms/monentreprise',
secret: 'LONG_RANDOM_SECRET'
};
app.use(auth(config));
// Route protégée
app.get('/profile', requiresAuth(), (req, res) => {
res.send(`Hello ${req.oidc.user.name}`);
});
Exemple avec Nginx (authentification transparente)
Pour protéger des applications qui ne supportent pas OIDC nativement :
location /protected/ {
auth_request /auth;
error_page 401 = @error401;
proxy_pass http://backend;
proxy_set_header X-User $upstream_http_x_user;
}
location = /auth {
internal;
proxy_pass http://keycloak:8080/realms/monentreprise/protocol/openid-connect/userinfo;
proxy_set_header Authorization $http_authorization;
}
location @error401 {
return 302 https://keycloak.example.com/realms/monentreprise/protocol/openid-connect/auth?...;
}
🔐 Configurer un Realm et des Clients
Via l’Interface Web
- Connectez-vous à la console admin :
https://keycloak:8443/admin/ - Créez un nouveau Realm : monentreprise
- Dans le Realm, créez un Client avec : Client ID :
my-app, Client Protocol :openid-connect, Access Type :confidential(pour les backends) oupublic(pour les SPA), Valid Redirect URIs :https://myapp.example.com/* - Créez des utilisateurs dans Users
- Assignez des rôles aux utilisateurs
Via l’API ou Terraform
Keycloak expose une API REST complète. Pour l’Infrastructure as Code, utilisez le provider Terraform Keycloak :
resource "keycloak_realm" "monentreprise" {
realm = "monentreprise"
enabled = true
}
resource "keycloak_openid_client" "myapp" {
realm_id = keycloak_realm.monentreprise.id
client_id = "my-app"
access_type = "CONFIDENTIAL"
valid_redirect_uris = ["https://myapp.example.com/*"]
}
🔄 Haute Disponibilité Keycloak
Un Keycloak en single instance est un SPOF. En HA, vous avez besoin de :
1. Base de Données Externe
Keycloak stocke ses données (utilisateurs, sessions) en base. Utilisez PostgreSQL en haute disponibilité (voir notre article précédent).
2. Clustering Keycloak
Keycloak utilise Infinispan pour le cache distribué. Les nœuds se découvrent via :
- JDBC_PING : via la base de données partagée (recommandé avec Docker)
- UDP Multicast : en datacenter (problématique en cloud)
3. Load Balancer
HAProxy ou Nginx devant les nœuds Keycloak avec session stickiness.
📊 Intégration LDAP/Active Directory
En entreprise, vos utilisateurs sont souvent dans un annuaire existant. Keycloak peut fédérer :
- LDAP : OpenLDAP, 389 Directory
- Active Directory : Microsoft AD
- Kerberos : Pour l’authentification transparente Windows
Les utilisateurs AD s’authentifient via Keycloak sans migration de données.
🚀 Déployer Keycloak HA en Production
Une installation Keycloak HA de qualité production nécessite :
- Build d’une image Docker optimisée
- Configuration du clustering JDBC_PING
- Connexion à PostgreSQL externe
- Configuration hostname et HTTPS
- Tuning JVM et heap
- Health checks et métriques Prometheus
Notre rôle Ansible automatise tout :
- ✅ Keycloak 26.0 avec Docker Compose
- ✅ Image optimisée (démarrage 60% plus rapide)
- ✅ Clustering JDBC_PING automatique
- ✅ Scaling horizontal via
keycloak_replicas - ✅ Compatible avec notre rôle PostgreSQL HA
- ✅ Documentation Day-1 et Day-2
Prêt à unifier l’authentification de votre SI ? Découvrez notre rôle Ansible keycloak_ha.
📖 Glossaire
- SSO (Single Sign-On) : Authentification unique permettant d’accéder à plusieurs applications avec un seul login
- IAM (Identity and Access Management) : Gestion centralisée des identités et des droits d’accès
- OIDC (OpenID Connect) : Protocole d’authentification moderne basé sur OAuth 2.0, utilisant des tokens JWT
- SAML : Security Assertion Markup Language, protocole d’authentification basé sur XML utilisé en entreprise
- Realm : Espace isolé dans Keycloak contenant ses propres utilisateurs, clients et configurations
- Client : Application qui délègue son authentification à Keycloak
- JWT (JSON Web Token) : Format de token auto-contenu encodé en JSON et signé cryptographiquement
- MFA (Multi-Factor Authentication) : Authentification à plusieurs facteurs (mot de passe + SMS/OTP)
Dans le prochain article, nous verrons comment centraliser tous vos logs avec Promtail et Loki. Fini les SSH sur 50 serveurs !
Tags:
