Construire un graphe de connexion dans l'éditeur
Sur cette page
Un graphe d’authentification décrit un parcours de connexion nœud par nœud : chaque nœud demande quelque chose ou prend une décision, et ses sorties mènent au nœud suivant. Ce tutoriel construit dans l’éditeur de la console un parcours en trois temps :
- l’identifiant, puis la vérification du mot de passe, confiée à un sous-graphe réutilisable dont le nombre d’essais est un paramètre ;
- un nœud de script JavaScript qui demande l’espace de travail, personnel ou professionnel ;
- pour l’espace professionnel, un second script qui affiche une charte à accepter.
Le code est dans le dépôt tosiam-samples, dossier tosiam-auth-graph : le graphe exporté de l’éditeur et les commandes ssoadm qui le recréent. Pour les notions (moteur, nœuds, sous-graphes, format JSON), voir Graphes d’authentification.
Étape 1 : le sous-graphe de vérification du mot de passe#
Un sous-graphe est un morceau de parcours que plusieurs graphes appellent. Celui-ci demande le mot de passe, le vérifie dans le data store et redemande en cas d’erreur, autant de fois que le dit son paramètre essais. Il ne finit pas par un succès ou un échec, mais par une sortie nommée (SubGraphExitNode) : valide ou refuse, que le graphe appelant relie à la suite.
Le sous-graphe se crée avec ssoadm, depuis tosiam/verification-mot-de-passe.json :
ssoadm create-sub-graph --realm ref --name verification-mot-de-passe \
--datafile verification-mot-de-passe.json{
"startNodeId": "motDePasse",
"parameters": [
{ "name": "essais", "description": "Nombre de nouveaux essais après un mot de passe faux", "default": "3" }
],
"steps": {
"motDePasse": { "type": "PasswordCollectorNode", "outcomes": { "outcome": "verification" } },
"verification": { "type": "DataStoreNode", "config": { "authLevel": 0 },
"outcomes": { "true": "valide", "false": "essais" } },
"essais": { "type": "RetryLimitNode", "config": { "retryLimit": "${essais}" },
"outcomes": { "true": "motDePasse", "false": "refuse" } },
"valide": { "type": "SubGraphExitNode", "config": { "exitName": "valide" } },
"refuse": { "type": "SubGraphExitNode", "config": { "exitName": "refuse" } }
}
}(Le fichier de l’exemple porte aussi les positions des nœuds dans l’éditeur, layout.) ${essais} est remplacé, à chaque exécution, par la valeur que donne le graphe appelant, ou par 3.
Dans la console, Graphes d’authentification, le sous-graphe apparaît avec l’étiquette SOUS-GRAPHE. Ouvert dans l’éditeur :
${essais}, mais la valeur enregistrée est bien la référence au paramètre.Étape 2 : créer le graphe et placer les nœuds#
Graphes d’authentification → Nouveau graphe, nom connexion-espace. L’éditeur s’ouvre sur une toile vide. Cherchez chaque nœud dans la palette de gauche et glissez-le sur la toile :
| Nœud de la palette | Rôle |
|---|---|
| Saisie de l’identifiant | Demande l’identifiant |
| Sous-graphe | Appelle verification-mot-de-passe |
| JavaScript (intégré), deux fois | « Espace de travail », puis « Charte » |
| Succès, Échec | Fins du parcours |
Le premier nœud posé devient le nœud de départ (étiquette DÉPART) ; le drapeau d’un nœud le désigne comme départ. L’éditeur nomme les nœuds d’après leur type et ne permet pas de les renommer : un nom donné dans un fichier importé est gardé.
Étape 3 : appeler le sous-graphe#
Dans le nœud « Sous-graphe », saisissez verification-mot-de-passe. Si le nœud affiche « Aucune sortie dans le sous-graphe cible pour l’instant », cliquez sur Ouvrir « verification-mot-de-passe » →, puis revenez au graphe par le fil d’Ariane : le nœud montre alors les sorties valide et refuse du sous-graphe, et un champ par paramètre. Mettez 2 dans « Nombre de nouveaux essais après un mot de passe faux » : ce graphe-ci accepte deux nouveaux essais, quel que soit le défaut du sous-graphe.
Étape 4 : les deux scripts#
Un nœud « JavaScript (intégré) » (ScriptedDecisionNode) exécute un script à chaque passage. Le script pose une question avec action.send(...), puis, quand l’utilisateur a répondu, choisit sa sortie avec action.goTo(...). Ses sorties possibles se déclarent dans le champ « Outcomes », séparées par des virgules : personnel,professionnel pour le premier, accepte,refuse pour le second. Le champ « Name » donne au script un nom qui le distingue dans les journaux : espace-de-travail, charte-professionnelle.
Modifier le code ouvre l’éditeur de script :
if (!sharedState['espace.demande']) {
sharedState['espace.demande'] = true;
action.send(callbacksBuilder.choiceCallback('Espace de travail', ['Personnel', 'Professionnel'], 0));
} else {
delete sharedState['espace.demande'];
action.goTo(callbacks.getChoice() == 1 ? 'professionnel' : 'personnel');
}Le second script affiche un texte et un choix :
if (!sharedState['charte.demandee']) {
sharedState['charte.demandee'] = true;
action.send(
callbacksBuilder.textOutputCallback("L'espace professionnel est réservé à un usage professionnel. Acceptez-vous la charte d'utilisation ?"),
callbacksBuilder.choiceCallback('Charte', ["J'accepte", 'Je refuse'], 0));
} else {
delete sharedState['charte.demandee'];
action.goTo(callbacks.getChoice() == 0 ? 'accepte' : 'refuse');
}TOSIAM propose aussi un nœud « Conditions d’utilisation » (TermsAndConditionsNode) qui garde la version acceptée dans le profil ; en 3.38.0, son attribut par défaut n’existe pas dans le data store et l’acceptation fait échouer la connexion (TOS-1753). D’où la charte par un script, qui ne stocke rien.
Étape 5 : relier les nœuds, vérifier, enregistrer#
Tirez un lien de chaque sortie (pastille à droite d’un nœud) vers l’entrée du nœud suivant (pastille à gauche) :
| Sortie | Vers |
|---|---|
Saisie de l’identifiant → outcome | Sous-graphe |
Sous-graphe → valide | Espace de travail |
Sous-graphe → refuse | Échec |
Espace de travail → personnel | Succès |
Espace de travail → professionnel | Charte |
Charte → accepte | Succès |
Charte → refuse | Échec |
Réorganiser automatiquement le graphe range les nœuds. L’indicateur de santé de la barre d’outils passe au vert quand rien ne manque (sortie non reliée, nœud inaccessible, script sans sortie…). Enregistrez (Ctrl+S).
Étape 6 : exposer le graphe à la connexion#
Exposer ce graphe comme parcours de connexion (barre d’outils) crée une instance du module graph-module du même nom, qui exécute le graphe. La liste des graphes le marque ACTIF :
L’adresse de connexion par la page XUI :
http://localhost:8080/tosiam/XUI/?realm=/ref&authIndexType=module&authIndexValue=connexion-espace#loginExécuter ce graphe comme connexion (barre d’outils de l’éditeur) le teste aussi sans ouvrir de session.
Étape 7 : exporter, puis recréer avec ssoadm#
Exporter (liste des graphes) enregistre une sélection de graphes dans un fichier JSON, avec les sous-graphes qu’ils appellent :
Le fichier est une enveloppe (graphs, subGraphs) ; ssoadm attend un graphe par fichier. L’exemple garde les deux, tirés de l’export avec jq, et les recrée ainsi :
jq '.graphs["connexion-espace"]' tosiam-authgraphs-ref-*.json > connexion-espace.json
jq '.graphs["verification-mot-de-passe"]' tosiam-authgraphs-ref-*.json > verification-mot-de-passe.json
ssoadm create-sub-graph --realm ref --name verification-mot-de-passe --datafile verification-mot-de-passe.json
ssoadm create-auth-graph --realm ref --name connexion-espace --datafile connexion-espace.json
ssoadm create-auth-instance --realm ref --name connexion-espace --authtype AuthGraph
ssoadm update-auth-instance --realm ref --name connexion-espace --attributevalues tosiam-auth-graph-id=connexion-espaceLe sous-graphe d’abord : le graphe y fait référence. Les identifiants des nœuds (node_1…) sont ceux que l’éditeur a donnés. Le format complet est décrit sur la page Import, export et format JSON.
Étape 8 : se connecter#
Ouvrez l’adresse de l’étape 6 et connectez-vous avec mmouse / Mickey-Mouse-2026. Après le mot de passe, le premier script demande l’espace de travail ; XUI affiche le choix sous forme de boutons :
« Personnel » ouvre la session. « Professionnel » affiche d’abord la charte :
En cas de problème#
| Symptôme | Cause probable |
|---|---|
| « Authentication failed » juste après l’identifiant | Le sous-graphe manque, ou il a été créé dans la console comme un graphe (TOS-1756) : créez-le avec ssoadm create-sub-graph |
| « 0 sur 1 importé(s) — 1 en échec » à l’import d’un sous-graphe | Un paramètre avec une valeur par défaut (TOS-1757) : créez le sous-graphe avec ssoadm |
| Le nœud « Sous-graphe » n’a pas de sortie | L’éditeur n’a pas encore lu le sous-graphe : ouvrez-le une fois avec le lien « Ouvrir … → » |
| La charte ne s’affiche pas et la connexion échoue après « Professionnel » | Le second script lit la réponse du premier : il doit noter sa question dans sharedState (étape 4) |
TypeError … Unknown identifier: put dans le journal | sharedState.put(...) dans un script : utilisez sharedState['cle'] = valeur |
| « Authentication failed » après un mot de passe juste | Trois essais faux récents : le compte est bloqué 15 minutes |
Pour aller plus loin#
- Graphes d’authentification et Import, export et format JSON.
- Les nœuds de décision, dont les scripts : Nœuds : décisions.
- Un nœud écrit en Java, quand un script ne suffit pas : Écrire un nœud d’authentification en Java.
Mis à jour le