Table of Contents
Introduction
La fédération d’identités permet de rassembler plusieurs sources d’identités en une seule, permettant ainsi aux utilisateurs de s’authentifier et d’accéder à divers services à partir d’un point central. Keycloak est un serveur d’identité et d’accès de source ouverte qui offre des fonctionnalités telles que la gestion des identités, l’authentification unique (SSO), et bien plus encore.
Dans cet article, nous allons aborder comment configurer une fédération d’identités avec Keycloak en intégrant deux annuaires Oracle Directory Server et un annuaire Active Directory (AD). Nous utiliserons le champ « mail » comme identifiant unique pour l’authentification.
Prérequis
- Installation de Keycloak
- Deux instances d’Oracle Directory Server
- Une instance d’Active Directory
- Connaissance de base en LDAP et SAML
Étape 1 : Configuration initiale de Keycloak
- Lancez Keycloak et connectez-vous à la console d’administration.
- Créez un nouveau Realm ou utilisez le realm
master
.
Étape 2 : Configurer les annuaires dans « User Federation »
Configuration du premier Oracle Directory Server
- Allez dans
User Federation
dans le menu de navigation à gauche. - Cliquez sur
Add provider
et choisissezLDAP
. - Remplissez les détails de votre premier Oracle Directory Server.
- Vendor:
Other
- Connection URL: ldap://
odserver1.example.com
- Port:
389
ou636
pour LDAPS - Users DN:
dc=example,dc=com
- User Object Classes:
inetOrgPerson, organizationalPerson
- Vendor:
Modifier les mappers pour le premier Oracle Directory Server
- Après avoir sauvegardé la configuration, cliquez sur
Mappers
. - Trouvez le mapper
username
et cliquez dessus pour le modifier. - Changez le
LDAP attribute
àmail
et assurez-vous que leUser Model Attribute
est également mis àusername
.
Configuration du deuxième Oracle Directory Server
Répétez les étapes ci-dessus pour le deuxième Oracle Directory Server, en vous assurant de modifier le Hostname
et les autres détails uniques à cette instance.
Configuration de l’Active Directory
- Allez dans
User Federation
et cliquez surAdd provider
, puis choisissezLDAP
. - Remplissez les détails pour l’annuaire Active Directory.
- Vendor:
Active Directory
- Connection URL: ldap://
ad.example.com
- Port:
389
ou636
pour LDAPS - Bind type : simple
- Bind DN:
DOMAINE\keycloak.bind
- Bind credentials :
password
- Users DN : DC=company,DC=com
- Vendor:
Modifier les mappers pour l’Active Directory
- Cliquez sur
Mappers
. - Trouvez le mapper, généralement appelé username ou
sAMAccountName
, et modifiez-le. - Changez le
LDAP attribute
àmail
et assurez-vous que leUser Model Attribute
est mis àusername
.
Mappers – ajout de nouveaux attributs
L’ajout de nouveaux attributs dans les mappers est une étape essentielle pour personnaliser la manière dont les attributs des utilisateurs sont mappés entre l’annuaire LDAP/Active Directory et Keycloak.
Ajout de nouveaux attributs dans les Mappers pour Oracle Directory Server et Active Directory
Étape 1 : Accédez à « User Federation »
- Connectez-vous à la console d’administration de Keycloak.
- Sélectionnez votre Realm et allez dans
User Federation
.
Étape 2 : Sélectionnez le fournisseur LDAP
- Dans la liste des fournisseurs, cliquez sur le fournisseur LDAP que vous avez précédemment configuré (Oracle Directory Server ou Active Directory).
Étape 3 : Accédez à « Mappers »
- Après avoir sélectionné le fournisseur, allez dans l’onglet
Mappers
.
Étape 4 : Ajoutez un nouveau Mapper
- Cliquez sur
Create
pour ajouter un nouveau mapper. - Remplissez les détails nécessaires :
- Name: Nom unique pour identifier le mapper.
- Mapper Type: Sélectionnez le type de mapper. Pour des attributs simples, vous pouvez choisir
user-attribute-ldap-mapper
. - LDAP Attribute: Nom de l’attribut dans l’annuaire LDAP/Active Directory.
- User Model Attribute: Nom de l’attribut dans le modèle d’utilisateur de Keycloak.
- Read Only: Cochez cette case si l’attribut ne doit pas être modifiable.
Étape 5 : Sauvegardez les changements
- Cliquez sur
Save
pour enregistrer le nouveau mapper.
Étape 6 : (Optionnel) Synchronisez les utilisateurs
Si vous avez déjà des utilisateurs synchronisés, effectuez une nouvelle synchronisation pour appliquer les changements.
Étape 7 : Vérifiez l’ajout de l’attribut
- Accédez à
Users
dans la console d’administration. - Sélectionnez un utilisateur et vérifiez si le nouvel attribut est correctement mappé.
Exemple pour l’attribut UID
Dans mon cas, j’ai eu à ajouter l’attribut uid pour les différents annuaires afin que cela remonte dans les métadonnées.
Cette configuration vous permet de remonter les éléments souhaités au niveau de la fiche utilisateur avec le username qui corresponde bien à l’adresse email ce qui garantit une unicité entre vos différents référentiels, l’adresse email étant censé être unique.
Ajout d’un Client Scope pour utiliser l’UID
Un aspect souvent négligé mais essentiel de cette configuration est l’utilisation de « Client Scopes ». Dans Keycloak, un « Client Scope » est une manière de définir des paramètres communs qui peuvent être partagés entre différents clients (applications). Il s’agit notamment de la manière dont les tokens OIDC (OpenID Connect) ou SAML sont générés, quels rôles ou attributs d’utilisateurs sont inclus dans ces tokens, etc. Nous alons donc ajouter un « Client Scope » qui utilise l’attribut uid
pour personnaliser la génération du token pour une application spécifique.
Étape 1 : Accédez à « Client Scopes »
- Dans la console d’administration de Keycloak, allez dans
Client Scopes
.
Étape 2 : Créez un nouveau Client Scope
- Cliquez sur
Create
. - Donnez un nom au Client Scope, par exemple
use-uid
. - Cliquez sur
Save
.
Étape 3 : Configurez le Mapper
- Après avoir créé le Client Scope, allez dans
Mappers
. - Cliquez sur
Create
. - Remplissez les champs comme suit :
- Name:
UID Mapper
- Mapper Type:
User Attribute
- User Attribute:
uid
- Token Claim Name:
uid
- Claim JSON Type:
String
- Name:
- Cliquez sur
Save
.
Étape 4 : Associez le Client Scope à un client
- Allez dans
Clients
. - Sélectionnez le client qui doit utiliser ce Client Scope.
- Allez dans l’onglet
Client Scopes
. - Dans
Available Client Scopes
, trouvezUID Mapper
et ajoutez-le àAssigned Client Scopes
.
Utilité
L’ajout d’un « Client Scope » spécifique devient indispensable si le plugin d’authentification OpenID de votre application s’attend à trouver un attribut uid
pour identifier de manière unique chaque utilisateur. Sans cet attribut, le plugin ne serait pas en mesure de correspondre au modèle d’utilisateur attendu, ce qui pourrait entraîner des échecs d’authentification ou des comportements imprévus.
L’utilisation d’un « Client Scope » spécifique dans Keycloak va affecter les métadonnées SAML ou OpenID Connect générées pour l’application cliente. Ces métadonnées sont utilisées pour configurer l’intégration entre l’application cliente et Keycloak. Lorsque vous ajoutez un « Client Scope » qui inclut un attribut spécifique comme l’uid
, cet attribut sera inclus dans les tokens générés pour l’application et, par conséquent, dans les métadonnées.
Impact sur les métadonnées
OpenID Connect
Si vous utilisez OpenID Connect, le nouvel attribut uid
sera ajouté au token ID généré pour l’application. Les métadonnées OpenID Connect vont inclure des informations sur ce nouvel attribut, en fonction de la manière dont vous configurez les scopes et les claims dans Keycloak.
SAML
Pour SAML, l’ajout du nouvel attribut affectera le fichier de métadonnées XML qui est utilisé pour configurer la relation de confiance entre l’application et Keycloak. Le nouvel attribut uid
sera ajouté comme un élément d’attribut dans le fichier de métadonnées, indiquant que cet attribut est disponible et peut être utilisé par l’application.
Conclusion
La mise en place d’une fédération d’identités avec Keycloak offre une solution robuste pour centraliser la gestion des identités, en intégrant divers technologies de référentieles d’identité (dans notre exemple : Oracle Directory Servers et Active Directory). L’utilisation de la section « User Federation » de Keycloak et la personnalisation des mappers pour utiliser le champ mail
comme identifiant unique sont des étapes clés pour réussir cette intégration. De plus, nous avons exploré comment ajouter de nouveaux attributs aux mappers pour personnaliser davantage l’intégration.
Ces configurations permettent non seulement une authentification cohérente à travers divers services, mais elles offrent également une grande flexibilité pour gérer des attributs et des rôles spécifiques aux utilisateurs. Ainsi, les administrateurs peuvent bénéficier d’une gestion centralisée tout en fournissant une expérience utilisateur transparente.
En suivant ces étapes, vous aurez une configuration robuste et flexible qui peut s’adapter à des besoins divers et complexes en matière de gestion des identités.