Modèle de sécurité
setActor().
La délégation de session comprend plusieurs mécanismes de sécurité, de la configuration au comportement à l’exécution :
- Les deux applications doivent être explicitement configurées à cette fin : l’application requérante doit être un client confidentiel capable de créer un jeton de transfert de session, et l’application cible doit explicitement activer
allow_delegated_access. Pour en savoir plus sur la configuration des applications requérante et cible, consultez Configurer la délégation de session. - Le jeton de transfert de session doit être échangé à partir de la même adresse IP que celle utilisée pour le demander par l’application requérante. Pour en savoir plus, consultez la note sur la liaison d’adresse IP sous Échanger le jeton de transfert de session.
- L’identité de l’acteur est enregistrée dans la session (
session.actor) et est accessible à vos Actions ainsi que dans les journaux du locataire, sous la forme de l’objet acteur transmis àsetActor(). - La session est éphémère et de courte durée. Pour en savoir plus, consultez Comportement de la session.
- Aucun jeton d’actualisation n’est émis, aucun écran MFA, de consentement ou d’inscription n’est autorisé, et les sessions actives existantes bloquent l’accès délégué afin de limiter la durée pendant laquelle une session déléguée peut survivre à une session légitime ou interagir avec elle.
- Les sessions déléguées génèrent des types d’événements dédiés dans les journaux du locataire, distincts des connexions habituelles, afin que vous puissiez les auditer séparément.
Obtenir un jeton de transfert de session
audience sur urn:YOUR_AUTH0_TENANT_DOMAIN:session_transfer. Consultez l’API d’authentification pour la liste complète des paramètres :
Un jeton de transfert de session a une courte durée de vie, comme un code d’autorisation. Échangez-le rapidement après son émission plutôt que de le conserver pour une utilisation ultérieure.
- Détecter la requête de délégation de session en vérifiant si l’audience demandée se termine par
:session_transfer. - Autoriser l’acteur pour l’utilisateur cible précis identifié par
subject_token. Cette opération créera une session au nom de cet utilisateur et est plus sensible que l’octroi d’un accès limité à une API. - Appeler
setUserByConnection()avec la connexion acceptée par l’application cible. Le jeton de transfert de session est limité à la connexion sélectionnée par votre Action. Consultez Accessibilité de l’application cible pour en savoir plus sur l’importance de cette étape et sur la façon de sélectionner la bonne connexion. - Appeler
setActor()pour consigner l’acteur. Cette étape est obligatoire. Si vous l’omettez lors de la demande d’un jeton de transfert de session, une erreur400est renvoyée.
Échanger le jeton de transfert de session
initiate_login_uri de l’application cible, avec le jeton en tant que paramètre de requête :
organization comme paramètre de requête :
Aucun écran interactif de sélection d’organisation n’est autorisé durant une session déléguée;
organization doit donc être transmis explicitement, plutôt que de s’appuyer sur un écran affiché au moment du login. La connexion sélectionnée par votre Action au moyen de setUserByConnection() doit aussi être liée à cette organisation, comme c’est le cas pour un login d’organisation normal (non délégué).initiate_login_uri de votre application cible doit transmettre les deux paramètres dans son propre appel au endpoint /authorize d’Auth0. Auth0 valide ensuite le jeton de transfert de session. S’il est valide, Auth0 établit une session déléguée éphémère pour l’utilisateur sujet, en enregistrant l’acteur dans son context. Aucune autre interaction de l’utilisateur n’est requise.
Le jeton de transfert de session doit être échangé depuis la même adresse IP que celle utilisée pour l’obtenir auprès de l’application requérante. Si le serveur backend de votre application requérante effectue la requête de token exchange, transmettez l’adresse IP réelle de l’acteur au moyen du header
auth0-forwarded-for, puisqu’il s’agira de l’adresse IP associée à la redirection du navigateur vers le endpoint /authorize.event.session.actor est disponible dans les Actions post-login une fois la session déléguée établie; il contient l’object acteur exact transmis à setActor() lors de l’émission du jeton de transfert de session.
Traiter les jetons obtenus
act identifiant la délégation :
act pour déterminer si une session est déléguée et appliquez tout traitement particulier requis par votre application, par exemple en restreignant les opérations sensibles ou en consignant une entrée dans la piste d’audit :
act dans le jeton d’accès qu’ils reçoivent, indépendamment de ce que fait l’application cible elle-même.
Dépannage d’un échange ayant échoué
- Votre Action détecte-t-elle qu’il s’agit d’une requête de délégation de session avant d’appliquer sa politique d’autorisation ? Vérifiez si l’audience demandée se termine par
:session_transfer(event.resource_server.identifier). Une Action qui ne distingue pas la délégation de session d’une simple délégation d’accès à une API pourrait autoriser ou rejeter les mauvaises requêtes. - L’utilisateur sujet est-il accessible par l’intermédiaire de la connexion sélectionnée par votre Action ? Le jeton de transfert de session est limité à la connexion définie par votre Action au moyen de
setUserByConnection(), ou à la connexion principale de l’utilisateur si vous utilisez plutôtsetUserById(). L’application cible ne peut échanger le jeton que si cette connexion précise est activée pour elle, et non simplement parce que l’utilisateur sujet appartient aussi à une autre connexion autorisée pour l’application cible. - L’application qui appelle l’échange de jeton personnalisé a-t-elle elle-même accès à cette même connexion ? Il s’agit d’un paramètre de l’application appelante (celle de l’acteur), distinct de l’application cible, qu’il est facile d’oublier.
- Le client cible a-t-il
allow_delegated_access: true, etsession_transfer.allowed_authentication_methodsinclut-ilquery? Siallow_delegated_accessn’est pas défini, Auth0 affiche une page de connexion normale au lieu de renvoyer une erreur.queryest requis, puisque le jeton est transmis comme paramètre de requête et non dans un cookie. Consultez Configurer l’application Web cible. - Si vous transmettez une
organization, est-elle explicitement incluse, et la connexion sélectionnée par votre Action est-elle liée à cette organisation ? Aucun sélecteur d’organisation interactif n’est autorisé pendant une session déléguée ; uneorganizationabsente ou non correspondante entraîne donc un échec au lieu d’afficher une invite. - Votre route
initiate_login_uri(ou votre assistant du SDK) transmet-elle réellement les paramètres de requêtesession_transfer_tokenetorganizationjusqu’à/authorize? Certains assistants de connexion du SDK ne transmettent pas les paramètres de requête arbitraires par défaut — vérifiez que le vôtre le fait. - Existe-t-il déjà une session Auth0 active pour ce navigateur et ce domaine ? Toute session existante — celle de l’utilisateur sujet ou une session déléguée antérieure pour un autre utilisateur — bloque l’établissement d’une nouvelle session déléguée. Cela se produit généralement lorsque les applications initiatrice et cible partagent le même domaine Auth0 et, par conséquent, le même cookie de session du navigateur. Donnez à l’application cible son propre domaine personnalisé, distinct du domaine de l’application initiatrice, afin que chacune dispose d’un cookie distinct. Sans domaine personnalisé, vous pouvez aussi demander à l’agent de soutien de copier l’
initiate_login_uride l’application cible, avec le jeton joint, dans une fenêtre de navigation privée ou incognito ouverte séparément. Pour la même raison, un agent doit se déconnecter d’une session déléguée avant d’en établir une autre pour un autre utilisateur. - Le jeton a-t-il été échangé depuis une adresse IP différente de celle utilisée pour le demander ? La liaison à l’appareil l’empêche — consultez la remarque sur la liaison IP ci-dessus.