
![[8.5.5.4 ou ultérieure]](../ng_v8554.gif)
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
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 de profil 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
Procédure
Résultats
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.
<!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>