PC & Mobile

Déconnexion OpenID Connect Backchannel – Ashen De Silva – Medium

Déconnexion OpenID Connect Backchannel - Ashen De Silva - Medium


Photo de Brennan Ehrhardt sur Unsplash

Comme mentionné dans mon précédent article, OpenID Connect spécifie trois formes différentes de déconnexion, dont deux utilisent la communication par le canal avant. OIDC Backchannel Logout est un mécanisme de déconnexion qui utilise la communication par le canal précédent.

Comme défini dans Ldapwiki,

Une communication sur le canal avant est une communication entre deux ou plusieurs parties observables dans le protocole.
Une communication en canal arrière est une communication lorsque les communications ne sont PAS observables par au moins une des parties du protocole.

En termes simples, la communication front-canal se produit lorsque les demandes sont communiquées via l’agent d’utilisateur (c’est-à-dire le navigateur), tandis que la communication en retour signifie que les demandes sont communiquées à l’aide de liaisons réseau directes entre serveurs.

Déconnexion Backchannel?

La déconnexion OpenID Connect Backchannel est un mécanisme par lequel Partie de confiance (RP) les applications sont déconnectées avec des demandes de déconnexion communiquées directement entre les RP et Fournisseurs OpenID (OP) en contournant l'agent d'utilisateur.

Ce mécanisme de déconnexion est beaucoup moins fragile que les autres méthodes utilisant la communication en mode frontal, car il ne dépend pas de l’activité du navigateur de l’utilisateur final. Cela peut sembler être la meilleure option pour la déconnexion OIDC - toutefois, ce n'est pas le cas pour tous les scénarios car cela impose de nouvelles exigences au système.

Un aperçu

  • Lorsqu'un RP ou un OP déclenche une action de déconnexion, le PO recherche tous les RP partageant la même session d'utilisateur sur le PO.
  • L'OP génère ensuite un jeton JWT spécial appelé jeton de déconnexion, contenant les revendications pertinentes pour chaque RP, et envoie des demandes de déconnexion avec les jetons de déconnexion aux noeuds finaux de déconnexion de chaque RP.
  • À la réception d'un jeton de déconnexion, le RP valide beaucoup le jeton et invalide la session de l'utilisateur particulier.

Jeton de déconnexion

Le jeton de déconnexion est un JWT très similaire au jeton ID dans OpenID Connect et constitue également un type de jeton d'événement de sécurité. Il contient des revendications spécifiques à l'action de déconnexion qui sont requises par les applications RP pour valider et vérifier la demande de déconnexion et déclencher le processus de déconnexion pour un utilisateur particulier.

Les revendications suivantes sont utilisées dans le jeton de déconnexion:

  • est-Identifiant de l'émetteur. Il s'agit d'une URL sensible à la casse de l'entité qui a généré le jeton (OP). Ceci est un champ obligatoire.
  • sous- Identifiant du sujet. C'est un identifiant unique attribué par l'émetteur au client. Ce champ est facultatif.
  • aud-Public. La liste des clients auxquels le jeton de déconnexion est destiné. Ceci est un champ obligatoire.
  • iat- Publié à l'heure. Heure à laquelle le jeton a été émis. Ce champ est également requis.
  • jti- JWT ID. Identifiant unique pour le jeton. Ceci est utilisé pour empêcher les replays de jetons de déconnexion. Ce champ est requis.
  • événements -Objet JSON contenant le nom du membre “http: // schémas. openid.net/event/backchannel-logout” La valeur du membre doit être un objet JSON vide. Ceci est pour déclarer que ce JWT est un jeton de déconnexion. Ce champ est requis.
  • sid -ID de session. Identifiant pour une session de l'agent d'utilisateur sur le RP. Ce champ est facultatif.

Bien que le sid et sous Les revendications sont considérées comme facultatives, un jeton de déconnexion doit contenir l'une des revendications et peut contenir les deux. Si la sid La revendication est absente, le RP doit déconnecter toutes les sessions de l'utilisateur final identifiées par le est et sous Réclamations.

le nonce Les réclamations devraient NE PAS être inclus dans un jeton de déconnexion pour des raisons de sécurité. Jetons de déconnexion DOIT être signé numériquement et PEUTégalement être crypté. (Voir spéc.)

Voici un exemple de jeton de déconnexion,

{
“Iss”: “https://server.example.com",
“Sub”: “248289761001”,
“Aud”: “s6BhdRkqt3”,
«Iat»: 1471566154,
“Jti”: “bWJq”,
“Sid”: “08a5019c-17e1–4977–8f42–65a12843ea02”,
"événements": {
“Http://schemas.openid.net/event/backchannel-logout": {}
}
}

Comment ça marche

Le processus de déconnexion Backchannel est lancé lorsque l'OP envoie une demande de déconnexion HTTP (S) POST à ​​l'URI de déconnexion Backchannel du RP enregistré sur l'OP. Une telle demande de déconnexion ressemblerait à ceci:

POST / backchannel_logout HTTP / 1.1
Hôte: rp.example.org
Type de contenu: application / x-www-form-urlencoded

logout_token = eyJhbGci ... .eyJpc3Mi ... .T3BlbklE ...

À la réception d'une demande de déconnexion, le RP doit effectuer les étapes de validation nécessaires pour s'assurer que l'action de déconnexion est légitime. Les étapes de validation sont décrites ici. En cas de problème avec les étapes de validation, la demande de déconnexion doit être rejetée et le RP doit renvoyer un HTTP 400 à l'OP.

Une fois la validation terminée et réussie, le RP doit localiser les sessions identifiées par le est et sous Revendications dans le jeton de déconnexion et effacez tout état associé à ces sessions. Actualiser les jetons sans le offline_accessla propriété devrait également être révoquée. Les mécanismes par lesquels le RP exécute ces tâches sont spécifiques à la mise en œuvre et ne sont pas strictement définis par la spécification.

Si un RP est également un PO servant des sessions connectées en aval, il doit également générer des demandes de déconnexion à la réception d'une demande de déconnexion, ainsi qu'à tous les RP en aval connectés.

Une fois la déconnexion réussie, le RP répond à l'OP avec un HTTP 200 OK et le processus de déconnexion Backchannel est enfin terminé. 😁

Avantages et inconvénients

Les pros

Le mécanisme de déconnexion Backchannel est plus fiable que d’autres méthodes car la communication Frontchannel n’est pas impliquée - le succès de la demande de déconnexion ne dépend pas de l’activité de la session du navigateur du RP.

Les inconvénients

  • De nouvelles exigences sont imposées au système car des liaisons réseau supplémentaires doivent être établies entre les serveurs pour la communication en retour. Le point de terminaison de déconnexion du RP du RP doit être accessible à partir de tous les PO et ne peut pas être protégé par un pare-feu ou un NAT lors de l’utilisation de PO publics.
  • Les données d'état de session stockées dans les cookies et le stockage HTML5 ne sont pas disponibles pour la communication en retour. Par conséquent, l'état doit être explicitement communiqué entre les parties.
  • Dans les méthodes frontchannel, la déconnexion consiste simplement à effacer les cookies et l’état de stockage HTML5. Il est plus complexe dans la déconnexion Backchannel, car les RP doivent implémenter des méthodes spécifiques à l’application pour mettre fin aux sessions utilisateur lors de la réception d’une demande de déconnexion.
Show More

SupportIvy

SupportIvy.com : Un lieu pour partager le savoir et mieux comprendre le monde. Meilleure plate-forme de support gratuit pour vous, Documentation &Tutoriels par les experts.

Related Articles

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Close
Close