Project

General

Profile

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)

Added by Bruno Boiget almost 8 years ago. Updated over 7 years ago.

Status:
Fermé
Priority:
Normal
Assigned To:
Category:
-
Start date:
Due date:
11/08/2013
% Done:

100%

Spent time:
Distribution:
EOLE 2.3

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 

Related issues

Related to EoleSSO - Evolution #1650: Articulation avec les téléservices Classée sans suite 04/07/2011

Associated revisions

Revision e09c3056 (diff)
Added by Bruno Boiget almost 8 years ago

ajout d'informations dans les données passées aux attributs calculés

Fixes #5592 @30m

Revision 5b94e6ba (diff)
Added by Bruno Boiget almost 8 years ago

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

Revision b69433cc (diff)
Added by Bruno Boiget almost 8 years ago

ajout d'informations dans les données passées aux attributs calculés

Fixes #5592 @30m

Revision b48402bb (diff)
Added by Bruno Boiget almost 8 years ago

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

Revision 15d94aeb (diff)
Added by Christophe LEON over 7 years ago

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

Revision c26981d5 (diff)
Added by Bruno Boiget over 7 years ago

correction de la récupération de l'attribut uaj dans les fichiers metadata (fixes #5592)

History

#1 Updated by Bruno Boiget almost 8 years ago

  • Status changed from Nouveau to Résolu
  • % Done changed from 0 to 100

#2 Updated by Bruno Boiget almost 8 years ago

  • Status changed from Résolu to Réouvert
  • Target version set to 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 Updated by Bruno Boiget almost 8 years ago

  • Status changed from Réouvert to Résolu

#6 Updated by Joël Cuissinat over 7 years ago

  • Status changed from Résolu to Fermé

#7 Updated by Bruno Boiget over 7 years ago

  • Status changed from Fermé to Réouvert
  • Target version changed from Mises à jour 2.3.10 to 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 Updated by Bruno Boiget over 7 years ago

  • Status changed from Réouvert to Résolu

#9 Updated by Fabrice Barconnière over 7 years ago

  • Due date set to 11/08/2013

#10 Updated by Fabrice Barconnière over 7 years ago

  • Status changed from Résolu to Fermé

Testé avec Bruno fédération entre un Amon et un Scribe, l'attribut uaj est bien envoyé par Scribe si demandé.

Also available in: Atom PDF