Concepts

Modèle d'identité

Sur cette page

TOSIAM repose sur un modèle d’identité hérité du User Management Service (UMS) d’iPlanet/OpenAM, enrichi par une couche REST moderne. Les identités sont stockées dans un datastore LDAP configurable par realm.

Types d’identité#

Faites défiler le tableau
TypeDescription
Utilisateur (User)Compte d’une personne physique ou d’un service
Groupe statique (StaticGroup)Liste figée de membres
Groupe dynamique (DynamicGroup)Membres calculés par filtre LDAP
Groupe dynamique assignable (AssignableDynamicGroup)Filtre LDAP + membres manuels
Rôle géré (ManagedRole)Rôle assigné explicitement à des utilisateurs
Rôle filtré (FilteredRole)Rôle calculé par filtre (tous les utilisateurs répondant à un critère)

Dans la console#

Le menu Identités regroupe les utilisateurs, les groupes et les appareils (passkeys, TOTP…) du royaume sélectionné.

Menu Identités de la console : liste des utilisateurs avec onglets Utilisateurs, Groupes et Appareils Menu Identités de la console : liste des utilisateurs avec onglets Utilisateurs, Groupes et Appareils
Les identités du royaume : onglets Utilisateurs, Groupes et Appareils (1), création d’un utilisateur (2).

Datastores#

Chaque realm peut configurer un ou plusieurs datastores. Les types supportés par tosiam-datastore :

Faites défiler le tableau
TypeBackend
DJLDAPv3RepoTosDJ (ForgeRock Directory Java), implémentation principale
ADHelperActive Directory
ADAMHelperAD Application Mode (AD LDS)
DirectoryHelperAnnuaire LDAP générique

La recherche persistante LDAP (DJLDAPv3PersistentSearch) permet à TOSIAM de recevoir les changements du datastore en temps réel, sans polling. Avec OpenLDAP, les changements sont reçus par la synchronisation de contenu de la RFC 4533 : voir Annuaire OpenLDAP. Sans notification, le cache des identités expire au lieu d’être invalidé : voir Annuaires sans notification.

Dans la console, le menu Datastores liste ceux du royaume. La colonne Suffisant reprend l’option du même nom : quand plusieurs datastores sont configurés, la recherche d’une identité s’arrête au premier datastore « suffisant » qui la trouve. Avec un seul datastore, « Non » est normal.

Menu Datastores de la console : le datastore embedded de type TosDJ, colonne Suffisant à Non Menu Datastores de la console : le datastore embedded de type TosDJ, colonne Suffisant à Non
Le datastore par défaut d’une QuickStart, avec la colonne Suffisant encadrée.

API REST des identités#

http
GET    /realms/{realm}/users              → lister les utilisateurs
POST   /realms/{realm}/users              → créer un utilisateur
GET    /realms/{realm}/users/{userId}     → lire un utilisateur
PUT    /realms/{realm}/users/{userId}     → mettre à jour
DELETE /realms/{realm}/users/{userId}     → supprimer

GET    /realms/{realm}/groups             → lister les groupes
POST   /realms/{realm}/groups             → créer un groupe
PUT    /realms/{realm}/groups/{groupId}/users → gérer les membres

Exemple : créer un utilisateur#

json
POST /realms/root/realms/employees/users
{
  "username": "alice",
  "userpassword": "Secret1234!",
  "mail": ["alice@example.com"],
  "givenname": ["Alice"],
  "sn": ["Martin"]
}

Schéma des attributs#

Le schéma de chaque attribut est consultable :

http
GET /identities/schema

Périphériques et MFA#

Les périphériques enregistrés (WebAuthn, OATH, Push) sont rattachés à l’identité de l’utilisateur :

http
GET    /realms/{realm}/users/{user}/devices/webauthn   → FIDO2
GET    /realms/{realm}/users/{user}/devices/2fa/oath   → TOTP/HOTP
GET    /realms/{realm}/users/{user}/devices/push       → Push
DELETE /realms/{realm}/users/{user}/devices/{type}/{deviceId}

Privilèges#

Les privilèges contrôlent les droits d’administration dans TOSIAM (différents des politiques d’autorisation applicatives) :

http
GET /identities/privileges/schema
GET /realms/{realm}/identities/group/{groupName}/privileges
PUT /realms/{realm}/identities/group/{groupName}/privileges

Exemples de privilèges : RealmAdmin, PolicyAdmin, AgentAdmin, LogAdmin.

Gestion via ssoadm#

bash
# Créer un utilisateur
ssoadm create-identity --realm / --idname alice --idtype User \
  --attributevalues "userpassword=Secret1234!" "mail=alice@example.com"

# Lister les utilisateurs
ssoadm list-identities --realm / --idtype User --filter "*"

# Ajouter un utilisateur à un groupe
ssoadm add-member --realm / --idname admins --idtype Group \
  --memberidname alice --memberidtype User

# Assigner un privilège
ssoadm add-privileges --realm / --idname admins --idtype Group \
  --attributevalues "PolicyAdmin"

Mis à jour le