Evolution #5592
Passer des informations supplémentaires dans les données de l'utilisateur pour permettre de calculer des attributs en fonction de la destination (saml)
Description
Pour permettre de résoudre le problème d'utilisateurs ayant des comptes dans plusieurs branches de l'annuaire de Seshat (multi affectations), il serait utile
d'avoir accès dans les fonctions de calcul d'attribut à l'entité SAML à laquelle on envoie les informations.
On ajoute les infos suivantes si elles sont disponibles au moment du calcul:
user_infos['saml_ident'] = <id_entité_à_joindre>
user_infos['saml_role'] = <role_entité_à_joindre> (SPSSODescriptor ou IDPSSODescriptor)
copie du mail de Christophe Leon
Salut, Bruno, Merci pour ce point Je souhaite juste préciser pour le modèle ou Seshat est FS (Orléans et Poitiers) Il convient de préciser qu'il faut mettre l'annuaire Académique en premier pour que EoleSSO aille chercher l'attribut de fédération sur un annuaire qui ne contient qu'une seule référence Car si il va le chercher dans replicat Seshat potentiellement il peut y avoir plusieurs entrées avec le même FederationKey Pour la partie parents Si le parent se connecte sur Seshat avec son compte TS (Sur l'annuaire des TS) L'annuaire des TS va lui remonter le FrEduVecteur de l'annuaire , ce n'est donc pas uniquement si le parent arrive par fédération via TS ou le problème se pose Sauf erreur dans le FrEduVecteur des TS il y a le code Rne (c'est le dernier champ) Dans ce cas au moment de la fédération (Exemple d'url https://seshat.ac-reunion.fr:8443/saml?css=federation&sp_ident=9740572D&RelayState=https://portail.college-2canons.re ) S'il est possible de remonter lors du calcul des attributs calculés (avant de construite la page SAML) le sp_ident J'ai regardé le code a priori cela semble réalisable dans /usr/share/sso/saml_resources.py SamlResponse::_render avant l'appel de app_ok, user_data = self.manager.get_user_details(app_ticket, response_url, renew=False, sections=True, keep_valid=True) (ligne 902) ? mettre dans le cache des user_data le sp_ident L'attribut calculé aurait alors a sa disposition - Le FrEduVecteur multivalué issue des TS - une base FrEduVecteur (monovalué) -> dn (issue de la construction quotidienne de la base de donné dont parle Bruno) - du code Rne (via sp_ident) Son algorithme serait alors le suivant Il récupère donc la bonne entrée dans son FrEduVecteur multivalué en fonction du sp_ident Il va rechercher la correspondance avec sa base local, il obtient le dn Avec le dn il obtient ainsi le intid dans le ldap seshat il envoi pour fédération le intid ainsi trouvé Je veux bien l'implémenter sur notre seshat, nous avons je pense a notre disposition des comptes TS (multi etab) ++ Christophe > > Si on parle de problème avec des multi-affectations des agents, ça concerne à priori seulement les agents (annuaire académique). > > Pour les parents/élèves c'est une autre problèmatique. Dans ce cas c'est l'annuaire local de seshat (réplicat des annuaires Scribe) qui fait référence (à moins d'utiliser directement l'annuaire des téléservices sur seshat). > > Comme j'ai l'impression que la problèmatique n'est pas très claire, j'essaye de résumer l'état actuel des choses : > > - annuaire agents > - annuaire local (réplicat des annuaires établissement) > (éventuellement, l'annuaire des téléservices) > > pour les agents: > > - la fédération entre seshat et FIM se fait sur le mail académique. > - la fédération entre seshat et envole (scribe) peut se faire entre l'attribut FederationKey (côté scribe) et le mail académique (côté seshat) dans le cas ou l'agent s'est connecté depuis l'annuaire académique. Si il s'est logué sur l'annuaire local de Seshat, dans ce cas on peut utiliser FederationKey des 2 côtés. (les différents cas sont gérés par un attribut calulcé) > > pour les élèves/parents, dans le cas d'une connexion initiale sur Seshat (le parent choisit l'établissement sur depuis la mire SSO / mode choisi à la Réunion) : > > - si la connexion initiale se fait sur seshat, on peut se baser sur l'attribut intid pour faire la fédération scribe/seshat > - pour la fédération vers les téléservices, on dispose d'un attribut calculé qui utilise une base de données 'dn local' -> FrEduVecteur qui permet de trouver le vecteur de fédération. > > Dans le cas où on souhaite faire une fédération ATEN -> Seshat (donc dans l'autre sens) : > > On n'a aujourd'hui pas de solution pour les parents présents dans plusieurs établissements. Le champ FrEduVecteur passé par le guichet est multi-valué, mais il correspond dans l'annuaire de seshat à plusieurs entrées distinctes. > > On pourrait imaginer de prendre la première entrée trouvée, mais on se retrouve ensuite bloqué pour faire la fédération vers les Ent établissement, car le champ intid (identifiant ENT) d'un parent peut être différent dans les établissements auquel il a accès. > > Les différentes solutions imaginées sont : > > - passer des informations supplémentaires à EoleSSO au moment où il fait la fédération entre seshat et scribe pour retrouver la bonne entrée (soit par une nouvelle recherche dans l'annuaire, soit en stockant plusieurs identités à la création de session sur Seshat). > - spécifier dans le vecteur de fédération envoyé par ATEN le numéro de l'établissement sur lequel l'utilisateur veut se connecter > - avoir un champ identifiant unique pour un même parent sur l'ensemble de ses établissements ... ça ne fait pas de mal de rêver :) > - je suis évidemment preneur d'autres idées > > A savoir, un travail a été commencé sur un projet d'annuaire académique initialisé sur Seshat et répliqué vers Scribe (ce qui pourrait permettre de gérer plus facilement un identifiant unique). Dans l'immédiat, ces différentes problématiques sont plus ou moins en pause pour des raisons de priorité/budget. > > Cordialement, > Bruno Boiget
Demandes liées
Révisions associées
ajout d'informations dans les données passées aux attributs calculés
Fixes #5592 @30m
attributs supplémentaires dans la balise entityDescriptor des métadonnées (Fixes #5592)
nouvel attribut uaj avec pour valeur numero_etab (creole)
stockage de cet attribut dans les données utilisateur en cas de fédération
ajout d'informations dans les données passées aux attributs calculés
Fixes #5592 @30m
attributs supplémentaires dans la balise entityDescriptor des métadonnées (Fixes #5592)
nouvel attribut uaj avec pour valeur numero_etab (creole)
stockage de cet attribut dans les données utilisateur en cas de fédération
Ajout de l'attribut calculé, pour prendre en compte la multi-affectation des parents (#5592)
+ ajout mode debug sur index.php (/edispatcher/index.php?debug) afin de voir les attributs de la personne authentifiée
correction de la récupération de l'attribut uaj dans les fichiers metadata (fixes #5592)
Historique
#1 Mis à jour par Bruno Boiget il y a presque 11 ans
- Statut changé de Nouveau à Résolu
- % réalisé changé de 0 à 100
Appliqué par commit e09c3056f0c27087b6b9905d98f3a93a37ef0185.
#2 Mis à jour par Bruno Boiget il y a presque 11 ans
- Statut changé de Résolu à À valider
- Version cible mis à Mises à jour 2.3.10
Il n'est pas facile de faire le lien entre entityID et RNE avec les données disponibles sur Seshat. Pour faciliter le travail, on envisage de mettre le rne comme attribut supplémentaire de la balise 'EntityDescriptor' des metadata d'EoleSSO.
extrait du mail de Christophe Léon à ce sujet :
Je propose l'évolution suivante dans le SSO Mettre le code RNE (uaj) dans la balise EntityDescriptor des métadata, a priori d'après la norme cette balise autorise des attributs optionnels Modifications dans templates/metadata.tmpl <EntityDescriptor xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="urn:oasis:names:tc:SAML:2.0:metadata" entityID="%s" uaj="%s"> saml_utils.py ligne 24: from config import METADATA_DIR, IDP_IDENTITY, AUTH_FORM_URL, encoding, LC_ALL, TIME_ADJUST, DEFAULT_MIN_CONTEXT,RNE ligne 356: data = md_tmpl % (IDP_IDENTITY, RNE.upper() ,cert_data, sso_endpoint, sso_endpoint, logout_endpoint, logout_endpoint, \ cert_data, logout_endpoint, logout_endpoint, consumer_endpoint, consumer_endpoint, ''.join(attr_consuming_services)) A ce moment la 3 solutions 1°) Avoir une moulinette (cron) qui traite les fichiers metadata et qui construit une base entityID -> Rne 2°) Le sso a son lancement et à la lecture des metadata construit cette base entityID -> Rne 3°) Le sso transfert cet élément lors de la fédération, dans ce cas il serait nécessaire d'ajouter les éléments suivants saml_utils.py Ligne 208 def get_metadata(identifier): ... for entity in find_tag(doc, 'EntityDescriptor'): if 'entityID' in entity.attrib: sp_meta['entityID'] = entity.get('entityID') if 'ID' in entity.attrib: sp_meta['entity_local_id'] = entity.get('ID') if 'uaj' in entity.attrib: # Ligne 221 sp_meta['uaj'] = entity.get('uaj') authserver.py def _add_user_infos(self, infos, session_id, ticket): # ajout des informations statiques infos.update({'rne':[config.RNE],'nom_etab':[config.ETABLISSEMENT]}) ... if ticket and hasattr(ticket, 'uaj'): infos['uaj'] = ticket.uaj
#3 Mis à jour par Bruno Boiget il y a presque 11 ans
- Statut changé de À valider à Résolu
Appliqué par commit b69433cc61baa0a66d1d8550fae6e87150b62f52.
#4 Mis à jour par Bruno Boiget il y a presque 11 ans
Appliqué par commit b48402bb53900f0a167b71cc8fd0f2673f1e2ca0.
#5 Mis à jour par Bruno Boiget il y a presque 11 ans
Appliqué par commit 5b94e6baa46e58f6325778126abbad59dbd4ebee.
#6 Mis à jour par Joël Cuissinat il y a plus de 10 ans
- Statut changé de Résolu à Fermé
#7 Mis à jour par Bruno Boiget il y a plus de 10 ans
- Statut changé de Fermé à À valider
- Version cible changé de Mises à jour 2.3.10 à Mises à jour 2.3.11
l'attribut 'uaj' présent dans les metadata n'est pas passé correctement dans les attributs de l'utilisateur en cas de fédération seshat (idp) -> scribe (sp).
#8 Mis à jour par Bruno Boiget il y a plus de 10 ans
- Statut changé de À valider à Résolu
Appliqué par commit c26981d51ba057c03d76ef36b410532b76b2e031.
#9 Mis à jour par Fabrice Barconnière il y a plus de 10 ans
- Echéance mis à 08/11/2013
#10 Mis à jour par Fabrice Barconnière il y a plus de 10 ans
- Statut changé de Résolu à Fermé
Testé avec Bruno fédération entre un Amon et un Scribe, l'attribut uaj est bien envoyé par Scribe si demandé.