Single sign-on (SSO)
La présente page ne s'applique pas aux DEP-Relying Parties qui reçoivent la SSO en exclusivité d'AGOV.Procédure
La procédure single sign-on (SSO) permet d’utiliser la même session de connexion pour une application A et pour une application B. La décision a été prise de ne pas mettre en œuvre cette méthode pour AGOV, ce qui signifie qu’il faut se connecter une nouvelle fois par AGOV pour accéder à l’application B (ce qui ne prend que dix secondes environ).Procédure SSO classique non prise en charge par AGOV
- Accéder à l’application A :
- si nécessaire, l’utilisateur clique sur le bouton de connexion.
- Il est ensuite redirigé vers AGOV.
- si nécessaire, l’utilisateur clique sur le bouton de connexion.
- Se connecter à AGOV:
- une fois connecté, l’utilisateur est redirigé automatiquement vers l’application A.
- Utiliser l’application A.
- une fois connecté, l’utilisateur est redirigé automatiquement vers l’application A.
- Accéder à l’application B:
- si nécessaire, l’utilisateur clique sur le bouton de connexion.
- Il est ensuite redirigé vers AGOV.
- si nécessaire, l’utilisateur clique sur le bouton de connexion.
- Vérifier si une session est encore active :
- si une session est encore active dans AGOV (durée de vie à définir), des cookies sont stockés sur le client utilisé.
- La connexion se fait alors automatiquement et sans interruption des services (seamless login).
- L’utilisateur est redirigé vers l’application B.
- Utiliser l’application B.
- si une session est encore active dans AGOV (durée de vie à définir), des cookies sont stockés sur le client utilisé.
Pourquoi AGOV ne prend pas en charge la procédure de connexion SSO
Pour des raisons liées à la sécurité et à la gouvernance, AGOV suit le principe « fire and forget » qui vise à garder les durées de vie des sessions aussi courtes que possible.- Sécurité :
- les sessions à durée de vie étendue représentent un risque pour la sécurité. Une fenêtre de navigateur ouverte peut en effet être utilisée par n’importe qui pour accéder à AGOV ou se connecter à un domaine SSO.
- Gouvernance :
- il est peu envisageable que tous les partenaires AGOV (relying parties) acceptent de recourir à des sessions à durée de vie étendue, et ce par manque de confiance. Une telle gouvernance serait donc difficile à mettre en œuvre.
- Charge administrative :
- la création de domaines SSO (c’est-à-dire le regroupement d’applications acceptant les procédures SSO) implique une charge administrative conséquente. Il serait nécessaire de formaliser l’accord des participants.
- Single logout (SLO) :
- si AGOV prenait en charge la procédure SSO, les applications utilisant cette procédure devraient aussi disposer d’une procédure single logout (SLO). Cette ambition serait difficile à réaliser au niveau intercantonal.
Comment un canton ou une commune peut tout de même utiliser la procédure SSO avec AGOV
Pour utiliser la procédure SSO, les cantons et les communes doivent relier les applications à un système IAM (identity and access management, gestion des identités et des accès) intermédiaire et non directement à AGOV. La solution open source de l’administration fédérale www.trustbroker.swisAu lieu de relier chaque application séparément à AGOV, il suffit d’y relier ce système IAM intermédiaire. Les sessions à durée de vie étendue sont ainsi conservées sur le système IAM intermédiaire et les domaines SSO y sont définis. La gouvernance correspondante est assurée par l’intermédiaire IAM, soit le canton ou la commune.
Procédure SSO avec iIAM et AGOV
- Accéder à l’application :
- si nécessaire, l’utilisateur clique sur le bouton de connexion.
- Il est ensuite redirigé vers le système IAM intermédiaire (iIAM).
- si nécessaire, l’utilisateur clique sur le bouton de connexion.
- Vérification de la session par le système iIAM :
- Session existante : le système iIAM établit un jeton d’authentification et déconnecte l’utilisateur.
- Session non existante : le système iIAM redirige l’utilisateur vers AGOV pour qu’il se connecte.
- Session existante : le système iIAM établit un jeton d’authentification et déconnecte l’utilisateur.
- Connexion avec AGOV :
- une fois la connexion réussie, AGOV renvoie l’utilisateur vers le système iIAM.
- Étendre la session :
- le système iIAM sauvegarde la session (durée de vie à définir) et établit un jeton d’authentification qu’il transmet à l’application cible.
- Utiliser l’application :
- l’application peut être utilisée normalement une fois que l’utilisateur est connecté.
Alternative : Fédération d’identités bilatérale
Alternative pour des transitions ciblées : fédération bilatérale d’identitésLorsqu’il n’est pas nécessaire de mettre en place un véritable domaine SSO, mais uniquement d’assurer une transition ciblée et transparente d’une application A vers une application B, une fédération bilatérale d’identités peut être mise en place.
Une relation de confiance directe est alors établie entre les applications concernées ou leurs systèmes IAM. Si la personne est déjà authentifiée dans l’application A, A ou son IAM peut transmettre à B une nouvelle assertion d’identité, destinée exclusivement à B et protégée cryptographiquement. B la vérifie, puis ouvre sa propre session.
AGOV ne participe pas à cette transition entre A et B et ne doit être ni étendu ni configuré spécialement à cette fin. En particulier, aucun jeton AGOV émis pour l’application A n’est transmis à l’application B. AGOV peut intervenir en amont pour authentifier la personne ; la relation de confiance directe, sa sécurité et sa gouvernance relèvent entièrement des entités concernées.
Une telle fédération bilatérale d’identités convient notamment à des transitions individuelles clairement définies. Si, en revanche, de nombreuses applications au sein d’une organisation doivent pouvoir utiliser le SSO entre elles, un système IAM intermédiaire, tel que décrit ci-dessus, est généralement plus approprié.
Détails techniques de la fédération bilatérale d’identitésFédération bilatérale d’identités pour une transition transparente entre applications
Une fédération bilatérale d’identités est adaptée lorsqu’il n’est pas nécessaire de mettre en place un domaine SSO complet, mais qu’une transition ciblée et transparente d’une application A déjà authentifiée vers une application B doit être possible.AGOV n’est ni étendu ni configuré spécialement à cette fin. En particulier, aucun domaine SSO n’est créé dans AGOV et aucune session AGOV n’est relayée entre les applications concernées.
Principe architectural
AGOV authentifie la personne physique auprès de l’application A ou de son IAM. L’authentification déjà effectuée peut ensuite servir de base à l’application A ou à son IAM pour émettre à l’intention de l’application B une nouvelle assertion d’identité spécifiquement destinée à B.La chaîne de confiance est donc la suivante :
AGOVDeux relations de confiance distinctes sont créées :
|
| authentifie la personne physique
v
IAM / application A
|
| émet pour l’application B une assertion
| d’identité propre et destinée à B
v
Application B
|
| ouvre sa propre session
v
Application cible
- AGOV -> application A
- Application A / IAM A -> application B
Pas de reprise de jetons AGOV
L’application B ne fait pas confiance à un jeton AGOV initialement émis pour l’application A. Un jeton émis pour une relying party donnée n’est pas automatiquement destiné à une autre relying party. En particulier, le contrôle de l’audience ne doit pas être affaibli afin d’accepter malgré tout un tel jeton.Le schéma suivant n’est donc pas prévu :
AGOVÀ la place, A ou son IAM émet une nouvelle assertion spécialement pour B :
|
| jeton pour l’application A
v
Application A
|
+-> Application B
AGOVL’authentification AGOV initiale ne constitue que la base sur laquelle l’émetteur de l’application A produit sa propre assertion.
|
v
IAM A
|
| nouvelle assertion signée
| Audience = application B
v
Application B
Rôles
AGOVAGOV authentifie la personne physique dans le cadre du processus de connexion existant de l’application A. AGOV n’a pas besoin de savoir que la personne appelle ensuite l’application B, quelles applications sont fédérées entre elles, quelle session est créée auprès de l’application B ou quelle assertion d’identité l’application A transmet ensuite à B.
Émetteur de l’application A
L’émetteur constitue l’ancre de confiance technique et organisationnelle du côté de l’application A. Idéalement, il s’agit d’un IAM ou d’un Security Token Service, et non d’un code applicatif quelconque. Il ne peut émettre des assertions d’identité pour l’application B que sur la base d’une session authentifiée valide.
Application B
L’application B tient une liste des émetteurs explicitement autorisés. Elle vérifie intégralement chaque assertion d’identité reçue et crée ensuite sa propre session applicative. Il n’est pas nécessaire que l’application B connaisse déjà la personne concernée.
Déroulement possible
- La personne est déjà connectée à l’application A. L’authentification sous-jacente peut, par exemple, avoir été effectuée avec AGOV. Après une authentification réussie, l’IAM A dispose de sa propre session.
- La personne sélectionne dans l’application A une fonction menant à l’application B. L’application A reconnaît la session existante et demande à son propre émetteur une assertion d’identité spécifiquement destinée à l’application B.
- L’émetteur crée une assertion signée cryptographiquement. Elle ne contient que les informations convenues nécessaires à B et est explicitement destinée à B. Elle peut, par exemple, contenir l’émetteur, l’audience, le subject, les instants d’émission et d’expiration, un identifiant de transaction unique, l’instant de l’authentification sous-jacente ainsi que les informations d’identité et de qualité convenues.
- L’assertion d’identité est de préférence transmise côté serveur à l’application B. La connexion peut en outre être protégée au moyen d’une authentification TLS mutuelle (mTLS).
Niveau transport : La partie appelante est-elle réellement le client technique enregistré ?
et
Niveau message : L’assertion d’identité a-t-elle réellement été signée par l’émetteur enregistré ?
Validation par l’application B
L’application B n’accepte l’assertion d’identité que si tous les contrôles prévus sont réussis. Il convient notamment de vérifier que :- le client technique est autorisé ;
- l’émetteur est enregistré ;
- la signature est valide ;
- la clé de signature est attribuée à cet émetteur ;
- le type de jeton ou d’assertion est celui attendu ;
- l’audience correspond exactement à l’application B ;
- les instants d’émission et d’expiration sont plausibles ;
- la durée de vie maximale autorisée est respectée ;
- l’identifiant de transaction unique n’a pas déjà été utilisé ;
- l’instant de l’authentification sous-jacente satisfait à la policy ;
- la qualité d’authentification et d’identité déclarée est suffisante pour le cas d’utilisation ;
- le schéma et les informations obligatoires sont valides.
Code de handover à usage unique
Après validation, l’application B peut générer un code de handover aléatoire, non devinable et de très courte durée de vie. Ce code ne contient lui-même aucune donnée personnelle et ne peut être utilisé qu’une seule fois.L’application B associe côté serveur le hash de ce code à l’assertion d’identité déjà validée, à l’émetteur, au subject, aux informations d’authentification, aux instants de création et d’expiration ainsi qu’au statut UNUSED.
Le code doit posséder une forte entropie, n’être valable que très brièvement et ne pouvoir être utilisé qu’une seule fois. Pour une transition immédiate via le navigateur, une durée de validité de quelques secondes à environ une minute au maximum est appropriée.
Transmission via le navigateur
Le navigateur reçoit uniquement ce code à usage unique. La transmission s’effectue de préférence au moyen d’un POST HTTPS vers un point de terminaison prévu à cet effet dans l’application B.Le navigateur ne transporte notamment pas :
- de jeton AGOV ;
- d’Access Token de l’application A ;
- de cookie de session de l’application A ;
- de cookie de session AGOV ;
- l’assertion d’identité complète ;
- des données personnelles inutiles.
Utilisation du code
Lors de la réception du code de handover, l’application B vérifie que le code existe, qu’il est encore valable, qu’il n’a pas déjà été utilisé et qu’il est associé à une transaction validée avec succès. Il est ensuite marqué atomiquement comme USED et une session propre à l’application B est ouverte.L’utilisation doit être atomique. Même deux requêtes arrivant simultanément ne doivent pas pouvoir utiliser deux fois le même code.
Session propre à l’application B
L’application B ouvre sa propre session. Celle-ci est indépendante de la session AGOV, de la session de l’application A et, le cas échéant, de la session de l’IAM de l’application A.Il n’en résulte donc pas automatiquement un Single Logout interorganisationnel. Une déconnexion de l’application A ne termine pas nécessairement la session de l’application B, et inversement.
Modèle de confiance
L’application B maintient un enregistrement explicite pour chaque émetteur autorisé. Celui-ci définit au minimum :- un identifiant d’émetteur unique ;
- l’identité du client technique autorisé, le cas échéant mTLS ;
- les clés publiques de signature autorisées ou une source de clés contrôlée ;
- l’audience attendue ;
- le type d’assertion attendu ;
- les algorithmes cryptographiques autorisés ;
- les claims autorisés et obligatoires ;
- la durée de validité maximale.
Gestion des clés
Les clés privées de signature restent auprès de l’émetteur concerné. L’application B n’a besoin que des clés publiques pour effectuer la vérification.Lors d’un changement de clé, une période de chevauchement contrôlée peut être prévue, pendant laquelle l’ancienne et la nouvelle clé publique sont acceptées. L’ancienne clé est ensuite retirée. Un émetteur ou une clé compromis doit pouvoir être bloqué rapidement.
Les modifications concernant les émetteurs, les clés et les clients techniques passent par un processus administratif contrôlé. Une assertion reçue ne doit pas pouvoir déterminer elle-même quelle clé externe arbitraire ou quelle source de clés externe arbitraire doit servir à sa vérification.
Protection contre la réutilisation
L’architecture combine plusieurs couches de protection. L’assertion d’identité est destinée uniquement à l’application B, de courte durée de vie, signée et dotée d’un identifiant de transaction unique. Le code de handover possède une forte entropie, est de courte durée de vie, ne contient aucune donnée personnelle et ne peut être utilisé qu’une seule fois de manière atomique.L’application B met en œuvre une protection contre la réutilisation des identifiants de transaction déjà utilisés. Un code de handover déjà utilisé est également refusé.
Signification d’une indication telle que auth_source = AGOV
Si l’application B doit savoir que l’authentification initiale a été effectuée par AGOV, le profil de fédération convenu peut prévoir une indication correspondante.Par exemple :
Issuer = IAM de l’application ACela signifie : l’émetteur de l’application A confirme que la session à la base de cette assertion d’identité a été authentifiée au moyen d’AGOV.
auth_source = AGOV
Cela ne signifie pas : cette assertion d’identité a été émise par AGOV.
L’émetteur reste l’IAM de l’application A. Pour cette information, l’application B fait confiance à l’émetteur de l’application A et non directement à AGOV.
Qualité d’authentification et d’identité
L’émetteur ne doit pas déclarer à l’application B une qualité supérieure à celle qui peut être déduite de manière fiable de l’authentification et du contrôle d’identité effectivement réalisés.La représentation de la qualité d’authentification, de la qualité du contrôle d’identité, de l’instant d’authentification, des moyens d’authentification utilisés et des autres caractéristiques de qualité pertinentes doit donc faire partie du profil de fédération convenu. Les indications de qualité librement interprétables sont à éviter.
Protection des données et minimisation
L’assertion d’identité contient uniquement les informations dont l’application B a besoin pour l’opération concrète. Une fédération bilatérale d’identités n’est pas une interface générale permettant d’échanger toutes les informations disponibles sur une personne.Il convient de définir sur les plans technique et organisationnel quels attributs peuvent être transmis, à quelle fin ils peuvent être utilisés, combien de temps ils sont nécessaires et quelle entité en assume la responsabilité.
Journalisation
Il convient de ne pas journaliser les assertions d’identité complètes, les codes de handover en clair, les cookies de session, les clés privées ou des données personnelles inutiles.Pour l’audit de sécurité et la traçabilité, peuvent notamment être consignés l’instant, l’émetteur, un identifiant de transaction pseudonymisé, le résultat de la validation, l’identifiant de clé utilisé, le résultat du handover et la classe d’erreur technique.
Comportement en cas d’erreur
Un handover défaillant ne doit jamais conduire à un affaiblissement des contrôles de sécurité. Un émetteur inconnu, une audience incorrecte, une signature invalide, une assertion expirée, un identifiant de transaction déjà utilisé, un code de handover expiré ou déjà utilisé, une qualité insuffisante ou un client technique non autorisé entraînent un refus.Après un handover échoué, l’application B peut, le cas échéant, proposer son processus de connexion normal.
Onboarding d’une nouvelle relation de confiance
Avant une mise en production, les parties concernées doivent convenir au minimum de l’émetteur, du client technique, des clés et de leur rotation, de l’audience, du type d’assertion, des claims obligatoires et facultatifs, de la qualité d’authentification et d’identité acceptée, de la durée de vie maximale, de la protection contre la réutilisation, des données personnelles autorisées, des contacts d’exploitation, du blocage d’urgence ainsi que des tests de conformité positifs et négatifs.Tests de sécurité
Avant la mise en service, il convient de tester au minimum les cas négatifs suivants :- signature falsifiée ;
- algorithme de signature non autorisé ;
- mauvais émetteur ;
- bon émetteur avec mauvaise clé ;
- bonne clé avec mauvaise audience ;
- assertion expirée ;
- assertion avec horodatage non plausible ;
- identifiant de transaction réutilisé ;
- code de handover réutilisé ;
- code de handover expiré ;
- mauvais client technique ;
- assertion provenant d’un autre émetteur ;
- assertion provenant d’un autre service du même émetteur ;
- claims manipulés ;
- clé inconnue ;
- double utilisation simultanée.
Découplage d’AGOV
Une fédération bilatérale d’identités ne crée aucune dépendance d’exécution supplémentaire entre l’application B et AGOV. Lors de la transition proprement dite, les systèmes concernés communiquent directement entre eux :Application A <-> application Bet non :
Application A <-> AGOV <-> application BAGOV reste limité à son rôle initial de système d’authentification.
Délimitation par rapport à un domaine SSO
Du point de vue de l’utilisatrice ou de l’utilisateur, le résultat peut ressembler à du SSO : la personne est connectée à l’application A, sélectionne l’application B et accède directement à B sans nouvelle connexion interactive.Sur le plan architectural, aucun domaine SSO commun n’est toutefois créé dans AGOV. Les responsabilités restent clairement séparées :
- AGOV : authentification de la personne physique.
- Application A / IAM A : session propre et assertion d’identité ciblée.
- Application B : validation, identité propre, session propre et autorisations propres.
Utilisation de standards existants
Si l’IAM de l’application A peut déjà agir comme Identity Provider conforme à un standard vis-à-vis de l’application B, il convient d’utiliser, dans la mesure du possible, un standard établi tel qu’OpenID Connect ou SAML au lieu de définir un mécanisme de transition propre.Le principe architectural reste identique :
Application B <-> IAM A <-> AGOVet non :
Application B <-> nouvelle fonction SSO d’AGOVLe point déterminant n’est pas le protocole concret utilisé, mais la séparation claire des relations de confiance.
Principe architectural final
Une session déjà authentifiée avec AGOV peut être utilisée par un IAM situé en aval comme base d’une fédération bilatérale d’identités vers une autre application.AGOV n’est pour cela ni étendu ni configuré spécialement. En particulier, aucun domaine SSO n’est créé dans AGOV, aucune session AGOV n’est relayée entre applications, aucun jeton AGOV émis pour une autre relying party n’est transmis et aucune fonction de fédération spécifique à une application n’est ajoutée à AGOV.
Les applications concernées ou leurs systèmes IAM établissent à la place leur propre relation de confiance, explicitement définie et sécurisée. Une transition transparente entre applications individuelles devient ainsi possible sans faire d’AGOV la plate-forme centrale de SSO entre ces applications.