Fédération SAML : Accès aux ressources
Activation des différents rôles dans un accord de fédération
Pour résumer, une fois les fichiers de métadata échangés entre EoleSSO et une entité partenaire (protocole SAML), les différents rôles disponibles sont conditionnés comme suit :
Si un fichier de description de l'entité partenaire (soit par l'URL de réception des assertions, soit par son nom d'entité) est présent dans
/usr/share/sso/app_filters
, EoleSSO pourra envoyer des assertions à ce partenaire en tant que fournisseur d'identité.Si le nom d'entité du partenaire est présent dans un fichier d'association dans le répertoire
/usr/share/sso/attribute_sets
, ce partenaire pourra jouer le rôle de fournisseur d'identité auprès d'EoleSSO. Si l'optionallow_idp_initiated
est àfalse
pour ce partenaire, ses assertions ne seront prises en compte que si elles font suite à une requête d'authentification émise au préalable (via l'URLdiscovery
décrite ci-dessus).
Accéder à une ressource d'un fournisseur de service
Une fois la fédération mise en place entre EoleSSO et un fournisseur de service (FS), il est possible d'accéder aux services du FS à l'aide d'une URL au format suivant :
https://adresse_serveur_sso:8443/saml?sp_ident=id_fs&RelayState=service
id_fs
est soit l'identifiant du fournisseur de service (entityID tel que défini dans son fichier de méta données), soit le nom de son fichier de méta données placé dans /usr/share/sso/metadata
(sans l'extension .xml).
RelayState
est une information indiquant au fournisseur de service ou rediriger l'utilisateur une fois son identité confirmée. Les données à envoyées peuvent être l'URL d'une application protégée par le fournisseur de service, l'identifiant de l'établissement depuis lequel l'utilisateur se connecte, ... (variable suivant le fournisseur de service).
L'accès à cette URL va déclencher la cinématique suivante :
vérification par le serveur EoleSSO de la session SSO de l'utilisateur (si il n'est pas connecté, une nouvelle session est établie après saisie des identifiants) ;
génération et envoi d'une réponse SAML au FS pour lui indiquer l'identité de l'utilisateur ;
Traitement de la réponse reçue par le fournisseur de service et recherche des informations sur l'utilisateur dans le référentiel du FS (profil associé, permissions, ...) ;
Redirection de l'utilisateur sur la ressource définie par RelayState (ou sur une ressource définie par défaut le cas échéant).
Accéder à une ressource en tant que fournisseur de service
Dans le cas où le serveur EoleSSO est utilisé comme fournisseur de service, l'accès à une ressource peut se faire de 2 façons :
en envoyant directement une réponse SAML d'authentification sur l'URL de traitement des assertions d'EoleSSO (FS) depuis le fournisseur d'identité (processus dit 'IDP initiated'). Une URL de service à atteindre peut être fournie par le paramètre RelayState.
en envoyant une requête SAML d'authentification depuis EoleSSO (FS) en spécifiant le fournisseur d'identité à interroger et le service à atteindre après authentification (méthode préférable).
Dans les 2 cas, une fois l'assertion reçue validée, une session est établie sur le serveur EoleSSO.
L'utilisateur est ensuite redirigé sur l'URL du service à atteindre (il est possible de définir un service par défaut pour chaque fournisseur d'identité, voir le chapitre précédent concernant la configuration des associations).
Exemple
Dans le cas d'un serveur Scribe servant de fournisseur de service, il est possible par exemple de spécifier dans RelayState l'accès à l'application Pydio (accès au FTP de Scribe). Si le fournisseur d'identité est également un serveur EoleSSO (adresse_FI), l'accès se fera à travers l'adresse suivante (cas 1) :
https://adresse_FI:8443/saml?sp_ident=id_scribe&RelayState=https://adresse_scribe/pydio
L'adresse à utiliser dans le cas 2 serait la suivante :
https://adresse_scibe:8443/discovery?idp_ident=id_fournisseur_identite&return_url=https://adresse_scribe/pydio
Gestion de la Déconnexion
Le serveur EoleSSO intègre la notion de déconnexion unique (single logout) dans le cadre de l'établissement d'un lien de fédération.
La procédure de déconnexion peut être initiée de deux façons.
Directement depuis le service EoleSSO, en accédant à l'URL : https://adresse_serveur_sso:8443/logout;
En utilisant le système de déconnexion de l'entité partenaire si celle-ci gère également la déconnexion unique.
Dans le deuxième cas, une demande de déconnexion au format SAML est envoyée au service EoleSSO, qui va enclencher la déconnexion et envoyer une confirmation une fois la procédure terminée (une adresse de redirection peut également être fournie avec la demande de déconnexion).
Une fois la procédure de déconnexion enclenchée, EoleSSO va envoyer une demande de déconnexion SAML à chaque entité partenaire sur laquelle l'utilisateur a établi une session par fédération.
Dans le cas où EoleSSO est également utilisé pour accéder à des applications locales, par exemple, pour le portail Envole du serveur Scribe, Il va également envoyer des requêtes de déconnexion aux applications ayant demandé un ticket au serveur SSO (ce comportement peut être désactivé dans la configuration du serveur).
Attention
Le mode de fonctionnement de la déconnexion unique est basé sur une suite d'aller-retours (par redirection) vers les différentes entités.
Dans le cas où une erreur se produit lors de la procédure de connexion sur une entité partenaire, il se peut que la procédure s'arrête dans un état de déconnexion partielle (la déconnexion n'est pas propagée à toutes les entités).
Dans ce cas, plusieurs solutions sont prévues pour limiter le problème :
- si l'URL de déconnexion du serveur EoleSSO est à nouveau sollicitée, le serveur va considérer que la dernière requête de déconnexion envoyée a échoué et va reprendre la procédure en passant au partenaire suivant.
- si une autre URL du serveur est sollicitée (création d'une nouvelle session, demande d'authentification par une application, ...), la session SSO précédente est dans tous les cas invalidée par le serveur (il devra donc se ré-authentifier).
Dans le dernier cas, il se peut que l'utilisateur possède toujours une session sur une entité partenaire.
La seule façon de résoudre le problème est de fermer le navigateur.