Architecture

Utiliser OpenLDAP comme annuaire des identités

Sur cette page

TOSIAM peut prendre ses utilisateurs dans un annuaire OpenLDAP, avec un magasin d’identités de type LDAPv3 générique. Les valeurs par défaut de ce type de magasin ne sont pas adaptées à OpenLDAP : cette page donne les réglages à faire, côté TOSIAM et côté annuaire, et ce qu’ils apportent.

Faites défiler le tableau
RéglageSans luiÀ partir de
Cache des DN18 opérations LDAP par connexion au lieu de 8toutes versions
Attributs de verrouillagepas de verrouillage de compte enregistré dans l’annuairetoutes versions
Notificationsune modification faite dans l’annuaire n’est vue qu’à l’expiration du cache, 15 minutes par défaut3.38.0

Les deux premiers réglages ne dépendent pas de la version : ils s’appliquent tels quels à une installation existante.

1. Activer le cache des DN#

Pour chaque opération sur un utilisateur, TOSIAM a besoin de son DN. Le magasin LDAPv3 générique le retrouve par une recherche sur l’identifiant, et son cache des DN est désactivé par défaut : la recherche est refaite à chaque opération.

Mesure sur une ferme de deux serveurs TOSIAM et deux serveurs OpenLDAP, un million d’utilisateurs, connexion par identifiant et mot de passe suivie d’un flux OAuth 2.0 :

Faites défiler le tableau
Cache des DNRecherches par identifiantLectures directesBINDOpérations LDAP par connexion
Désactivé (défaut)12,05,01,018,0
Activé2,05,01,08,0

Les temps de réponse de TOSIAM sont les mêmes dans les deux cas ; c’est la charge de l’annuaire qui est divisée par deux.

bash
ssoadm update-datastore --realm /employees --name users \
  --adminid amadmin --password-file /chemin/vers/pwd.txt \
  --attributevalues \
    "sun-idrepo-ldapv3-dncache-enabled=true" \
    "sun-idrepo-ldapv3-dncache-size=100000"

sun-idrepo-ldapv3-dncache-size est le nombre de DN gardés en mémoire par serveur, 1 500 par défaut. Dimensionnez-le sur le nombre d’utilisateurs actifs sur la durée d’une session. La modification est prise en compte à chaud.

2. Déclarer les attributs de verrouillage#

Le verrouillage de compte enregistre le compteur d’échecs et le statut du compte dans l’entrée de l’utilisateur. Le magasin LDAPv3 générique ne déclare pas ces attributs, et OpenLDAP ne les connaît pas.

Dans OpenLDAP : le schéma#

Le schéma utilisateur de TOSIAM est livré pour TosDJ dans lib/tst-ldif.jar de la distribution TosDJ. Ses définitions sont acceptées telles quelles par OpenLDAP, sous la forme attendue par cn=config :

bash
{
  echo "dn: cn=tosiam,cn=schema,cn=config"
  echo "objectClass: olcSchemaConfig"
  echo "cn: tosiam"
  unzip -p tst-ldif.jar ldif/opendj/opendj_user_schema.ldif \
    | sed -n -e 's/^attributeTypes: /olcAttributeTypes: /p' \
             -e 's/^objectClasses: /olcObjectClasses: /p'
} > tosiam-schema.ldif

ldapadd -Y EXTERNAL -H ldapi:/// -f tosiam-schema.ldif

Les utilisateurs doivent ensuite porter les classes auxiliaires inetuser (statut du compte) et sunAMAuthAccountLockout (compteur d’échecs), et le compte de service de TOSIAM doit pouvoir écrire ces attributs.

Dans TOSIAM : les attributs du magasin#

Ajoutez aux attributs et aux classes d’objets du magasin :

Faites défiler le tableau
Propriété du magasinValeurs à ajouter
sun-idrepo-ldapv3-config-user-attributessunAMAuthInvalidAttemptsData, iplanet-am-user-login-status
sun-idrepo-ldapv3-config-user-objectclassinetUser, sunAMAuthAccountLockout, iplanet-am-user-service

3. Recevoir les notifications de l’annuaire#

Chaque serveur TOSIAM garde les identités en cache. Avec TosDJ, l’annuaire le prévient de chaque changement par une recherche persistante. OpenLDAP ne propose pas ce mécanisme : il notifie par la synchronisation de contenu de la RFC 4533 (syncrepl), celle qu’il utilise pour sa propre réplication. TOSIAM la prend en charge à partir de la version 3.38.0.

Sans notification, TOSIAM applique le fonctionnement décrit dans Annuaires sans notification : le verrouillage et le statut du compte restent fiables, mais les groupes et les attributs de profil peuvent avoir jusqu’à 15 minutes de retard.

Dans OpenLDAP : l’overlay syncprov#

L’overlay syncprov doit être chargé sur la base des identités de chaque serveur OpenLDAP auquel TOSIAM se connecte. Un serveur qui sert de fournisseur de réplication l’a déjà.

ldif
dn: cn=module{1},cn=config
objectClass: olcModuleList
cn: module{1}
olcModulePath: /usr/lib/ldap
olcModuleLoad: syncprov

dn: olcOverlay=syncprov,olcDatabase={1}mdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpCheckpoint: 100 10
olcSpSessionlog: 1000

Le numéro du module, le chemin et le numéro de la base dépendent de votre installation. Le compte de service de TOSIAM doit pouvoir lire les entrées, ainsi que l’attribut contextCSN de l’entrée du suffixe. Pour vérifier que l’annuaire annonce la synchronisation :

bash
ldapsearch -x -H ldap://annuaire.example.fr -b "" -s base supportedControl \
  | grep 1.3.6.1.4.1.4203.1.9.1.1

Dans TOSIAM : la base de notification#

Renseignez le DN de base de la recherche persistante du magasin. C’est la même propriété que pour TosDJ : TOSIAM choisit le mécanisme selon ce que l’annuaire annonce.

bash
ssoadm update-datastore --realm /employees --name users \
  --adminid amadmin --password-file /chemin/vers/pwd.txt \
  --attributevalues "sun-idrepo-ldapv3-config-psearchbase=dc=example,dc=fr"

Vérifier#

  • Le journal IdRepo.log du répertoire debug de l’instance ne contient plus le message No change notification for the data store… pour ce magasin.
  • Chaque serveur TOSIAM garde une recherche ouverte sur l’annuaire, sur la base de notification.
  • Une modification faite directement dans l’annuaire est lue aussitôt par l’API REST de chaque serveur TOSIAM.

Ce que cela change#

Faites défiler le tableau
Sans notificationAvec notification
Verrouillage de compte entre serveursfiablefiable
Compte désactivé dans l’annuairerefusé aussitôtrefusé aussitôt
Attribut ou groupe modifié dans l’annuairevu à l’expiration du cachevu aussitôt
Utilisateur supprimé dans l’annuairevu à l’expiration du cachevu aussitôt
Opérations LDAP par connexion8,08,0

Les notifications n’allègent pas la charge de l’annuaire : elles apportent la fraîcheur des données.

À chaque connexion ou reconnexion à l’annuaire, TOSIAM vide son cache puis reprend l’écoute à partir de l’état courant de l’annuaire. L’arrêt d’un serveur OpenLDAP ne fait donc perdre aucun changement : TOSIAM se reconnecte à un autre serveur et relit les identités à la demande.

Limites#

Ce qui a été validé : OpenLDAP 2.6, deux serveurs en réplication multi-maîtres, un million d’utilisateurs, deux serveurs TOSIAM. N’ont pas été testés : OpenLDAP 2.4 et 2.5, et un répartiteur de charge placé entre TOSIAM et les annuaires, qui doit laisser ouverte une connexion longue.

Pour aller plus loin#

Mis à jour le