Appel du noeud final de gestion de session pour OpenID Connect

Le noeud final de gestion de session permet aux parties utilisatrices OpenID Connect de surveiller l'état de connexion d'un utilisateur à un fournisseur OpenID Connect tout en réduisant le trafic sur le réseau. Avec l'aide du noeud final de gestion de session, une partie utilisatrice peut déconnecter un utilisateur déconnecté du fournisseur OpenID Connect.

Avant de commencer

L'URL de noeud final de gestion de session du fournisseur OpenID est obtenue de l'attribut check_session_iframe dans les informations de reconnaissance qui sont renvoyées par le noeud final de reconnaissance du fournisseur OpenID. Cette URL doit être utilisée comme cible d'un élément iframe dans l'application RP qui requiert la fonctionnalité de gestion de session. L'application RP doit également connaître l'attribut id de l'élément iframe pour soumettre les demandes Window.postMessage() à ce dernier.

Pourquoi et quand exécuter cette tâche

Pour déterminer l'état de connexion d'un utilisateur, la partie utilisatrice charge un élément iframe avec sa cible src définie sur le noeud final de gestion de session du fournisseur OpenID. Le noeud final de gestion de session a accès à un cookie qui stocke l'état de connexion, ou l'état de navigation, d'un utilisateur. Ce cookie d'état du navigateur est mis à jour lorsqu'un utilisateur se déconnecte du fournisseur OpenID. La partie utilisatrice peut ensuite utiliser le scriptage côté client pour appeler la fonction Window.postMessage() de l'élément iframe du fournisseur OpenID, qui envoie l'ID client et l'état de session actuellement connu dans le texte du message. Si la partie utilisatrice reçoit un élément postMessage du fournisseur OpenID avec une valeur changed, l'état de connexion de l'utilisateur au niveau du fournisseur OpenID a été modifié et la partie utilisatrice peut décider ou non de déconnecter l'utilisateur. Si la valeur renvoyée est unchanged, l'utilisateur est toujours connecté au fournisseur OpenID.

Un serveur Liberty avec OpenID Connect activé peut accéder au noeud final de gestion de session OpenID Connect à l'URL suivante :

https://server.example.com:443/oidc/endpoint/<provider_name>/check_session_iframe
Remarque : Dans cet exemple le port SSL du fournisseur OpenID Connect doit être 443.

Procédure

  1. Créez une ressource web dans l'application de partie utilisatrice appropriée capable de charger un élément iframe qui cible le noeud final de gestion de session de fournisseur OpenID. La ressource Web doit aussi avoir accès à la valeur d'état de session qui est renvoyée dans le paramètre session_state de la réponse d'autorisation. La valeur d'état de session peut être stockée dans un cookie, par exemple, ou de tout autre manière qui permet au scriptage coté client dans la ressource Web de connaître cette valeur. Voici un exemple de fragment HTML pour un élément iframe.
    <iframe id="iframeOP" src="https://server.example.com:443/oidc/endpoint/OidcConfigSample/check_session_iframe" frameborder="0" width="0" height="0"></iframe>
  2. Pour vérifier l'état de connexion d'un utilisateur, appelez la fonction Window.postMessage() de l'élément iframe du fournisseur OpenID, en transmettant l'ID client et l'état de session en tant que paramètre de message au format ID client + " " + Etat de session et le nom du fournisseur OpenID the comme paramètre d'origine cible. Dans l'exemple de fonction JavaScript ci-après, le script attend que la valeur d'état de session soit stockée dans un cookie nommé session_state, et la fonction getCookieValue() renvoie la valeur qui est stockée dan le cookie session_state.
    	var targetOP = "https://server.example.com:443";
    	function checkStatus() {
               var client = "client01";
               var sessionState = getCookieValue("session_state");
               var text = client + " " + sessionState;
               var iframe = document.getElementById("iframeOP");
               iframe.contentWindow.postMessage(text, targetOP);
    	}
  3. Configurez les ressources afin d'écouter postMessages depuis le fournisseur OpenID contenant la valeur changed ou unchanged pour refléter l'état de connexion respectif de l'utilisateur. La partie utilisatrice peut ensuite décider si l'utilisateur doit être déconnecté de la partie utilisatrice en fonction de la valeur qui est renvoyée par le fournisseur OpenID. La fonction doit s'assurer que l'origine de postMessage correspond au nom d'hôte de fournisseur OpenID attendu. Les messages qui ne correspondent pas sont rejetés. L'exemple JavaScript ci-après illustre comment ajouter un programme d'écoute d'événement à la ressource Web afin d'écouter ces messages.
    	var targetOP = "https://server.example.com:443";
    	window.addEventListener("message", receiveMessage, false);
    	function receiveMessage(event) {
               if (event.origin !== targetOP) {
                         // Origin did not come from the OP; this message must be rejected.
                         return;
               }
               if (event.data === "unchanged") {
                         // User is still logged in to the OP
               } else {
                         // User has logged out of the OP
               }
    	}

Résultats

Vous disposez maintenant d'une ressource Web sur la partie utilisatrice capable d'utiliser la fonction de gestion de session d'OpenID Connect sur le fournisseur OpenID du serveur Liberty. L'état de navigateur qui est géré dans l'élément iframe du fournisseur OpenID est mis à jour lorsque les utilisateurs se connectent au fournisseur OpenID ou se déconnectent de ce dernier. Après une connexion réussie au niveau du fournisseur OpenID, une nouvelle valeur d'état de session est fournie dans la réponse d'autorisation à la partie utilisatrice. La partie utilisatrice peut ensuite utiliser le scriptage côté client afin de valider l'état de session de l'utilisateur et déterminer si l'état de connexion de ce dernier a été modifié sur le fournisseur OpenID sans diffusion d'un trafic réseau supplémentaire.

Exemple

L'exemple HTML ci-après illustre une page HTML complète qui utilise la gestion de session OpenID Connect. L'attribut src de l'élément iframe dy fournisseur OpenID est défini sur l'URL de noeud final de gestion de session obtenue auprès du fournisseur OpenID. La fonction startChecking() est automatiquement appelée toutes les 60 secondes et elle vérifie l'état de connexion de l'utilisateur. La page comporte un programme d'écoute d'événement message qui appelle la fonction receiveMessage() lorsqu'un postMessage est reçu. Cette fonction garantit que le postMessage vient du domaine attendu pour le fournisseur OpenID et vérifie la valeur du message renvoyé afin de déterminer si l'état de connexion de l'utilisateur est changed ou unchanged.

Vous pouvez charger cette page HTML, elle-même, en tant qu'élément iframe invisible dans une autre ressource Web au sein de la partie utilisatrice. Cela permet à toute ressource Web qui charge cet élément iframe de surveiller l'état de connexion de l'utilisateur côté client.
	<!DOCTYPE html>
	<html>
	<head>
	<meta charset="ISO-8859-1">
	<title>iFrame RP Page</title>
	</head>
	<body onload="javascript:startChecking()">
            <iframe id="iframeOP" src="https://localhost:8999/oidc/endpoint/OidcConfigSample/check_session_iframe" frameborder="0" width="0" height="0"></iframe>
	</body>
	<script>
            var targetOP = "https://server.example.com:443";
		
            window.addEventListener("message", receiveMessage, false);
		
            function startChecking() {
                      checkStatus();
                      // Check status every 60 seconds
                      setInterval("checkStatus()", 1000*60);
            }
		
            function getCookieValue(cookieName) {
                      var name = cookieName + "=";
                      var cookies = document.cookie.split(';');
                      if (!cookies) {
                                return null;
                      }
                      for (var i = 0; i < cookies.length; i++) {
                                var cookie = cookies[i].trim();
                                if (cookie.indexOf(name) == 0) {
                                          return cookie.substring(name.length, cookie.length);
                                }
                      }
                      return null;
            }
		
            function checkStatus() {
                      var client = "client01";
                      var sessionState = getCookieValue("session_state");
                      var text = client + " " + sessionState;
                      var iframe = document.getElementById("iframeOP");
                      iframe.contentWindow.postMessage(text, targetOP);
            }
		
            function receiveMessage(event) {
                      if (event.origin !== targetOP) {
                                // Origin did not come from the OP; this message must be rejected
                                return;
                      }
                      if (event.data === "unchanged") {
                                // User is still logged in to the OP
                      } else {
                                // User has logged out of the OP
                      }
            }
	</script>
	</html>

Icône indiquant le type de rubrique Rubrique Tâche



Icône d'horodatage Dernière mise à jour: Tuesday, 6 December 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twlp_oidc_session_mgmt_endpoint
Nom du fichier : twlp_oidc_session_mgmt_endpoint.html