Déconnexion unique (SLO, Single Logout)

La déconnexion unique peut être utilisée pour déconnecter les utilisateurs de l’orchestrateur et des fournisseurs d’identité concernés. Un exemple de diagramme séquentiel du flux du déconnexion unique (SLO) est présenté ci-dessous.

single logout sequence_diagram

Par défaut, l’orchestrateur effectue les opérations suivantes lors de la déconnexion :

  • Suppression de tous les cookies associés à la requête
  • Suppression de la session
  • Déconnexion de l’utilisateur des fournisseurs d’identité associés à la session

Options de configuration

URL de déconnexion

logoutURL correspond au terminal appelé par les clients pour déclencher une déconnexion. Ce terminal est hébergé par l’orchestrateur et doit se trouver sur le même domaine.

ℹ️
Assurez-vous que tous les connecteurs utilisés en tant que fournisseur d’identité définissent les champs requis pour la déconnexion.

URL de redirection post-déconnexion

postLogoutRedirectURL est un champ facultatif utilisé pour définir l’URL vers laquelle rediriger le client à la fin du processus de déconnexion unique. Si le champ n’est pas spécifié, le client recevra un message indiquant que la déconnexion a été effectuée avec succès.

Extension de services post-déconnexion

postLogoutSE est un champ facultatif utilisé pour définir une extension de services qui détermine le comportement qui suit la déconnexion. Cette extension de services est exécutée avant la redirection vers postLogoutRedirectURL.

Exemple de configurations

Configuration de base

singleLogout:
  logoutURL: https://idp.enterprise.com/single-logout
  postLogoutRedirectURL : https://enterprise.com/index.html

Extension de services postLogoutSE

Cette extension de services permet à l’utilisateur d’ajouter un comportement personnalisé dans le cadre de la déconnexion unique. Elle est exécutée après la déconnexion des fournisseurs d’identité, mais avant la redirection vers postLogoutRedirectURL.

Si elle n’est pas définie, l’orchestrateur adoptera le comportement par défaut qui consiste à supprimer tous les cookies associés à cette requête.

Vous trouverez ci-dessous un exemple de suppression d’un cookie spécifique dans le cadre de la procédure de déconnexion unique.

singleLogout:
  logoutURL: https://idp.enterprise.com/single-logout
  postLogoutRedirectURL : https://enterprise.com/index.html
  postLogoutSE:
    funcName: PostLogout
    file: /etc/maverics/extensions/postLogout.go

/etc/maverics/extensions/postLogout.go

package main

import (
	"net/http"

	"maverics/log"
)

func PostLogout(rw http.ResponseWriter, req *http.Request) {
	log.Info("msg", "starting postLogoutSE")
	for _, c := range req.Cookies() {
		if c.Name == "storage" {
			http.SetCookie(rw, &http.Cookie{
				Name:   c.Name,
				Path:   "/",
				MaxAge: -1,
			})
		}
	}
	log.Info("msg", "successfully completed postLogoutSE")
}