Guides
SSO Logout
Implémentez le RP-Initiated Logout et le Backchannel Logout avec Trousseau.
Vue d'ensemble
Trousseau prend en charge deux mécanismes de déconnexion :
- RP-Initiated Logout: Votre application redirige l'utilisateur vers l'endpoint end-session de Trousseau
- Backchannel Logout: Trousseau notifie votre application lorsqu'un utilisateur se déconnecte depuis une autre application
RP-Initiated Logout
Lorsque votre utilisateur clique sur "Se déconnecter", vous devez :
- Effacer la session de votre application (cookies, store de session côté serveur)
- Rediriger vers l'endpoint end-session de Trousseau pour terminer la session SSO
URL de déconnexion
GET https://auth.trousseau.app/application/o/{your-slug}/end-session/
?id_token_hint={id_token}
&post_logout_redirect_uri=https://app.yourapp.com/signed-out| Paramètre | Obligatoire | Description |
|---|---|---|
id_token_hint | Recommandé | L'ID token de la session utilisateur. Permet à Trousseau d'identifier quelle session invalider. |
post_logout_redirect_uri | Recommandé | Vers où rediriger l'utilisateur après la déconnexion. Doit être une URI de redirection enregistrée. |
Flux
L'utilisateur clique sur "Se déconnecter"
→ Votre application efface sa propre session
→ Redirection vers Trousseau /end-session/
→ Trousseau invalide la session SSO
→ Trousseau redirige vers post_logout_redirect_uri
→ L'utilisateur voit votre page de déconnexionExemple (Next.js)
export async function logout() {
const session = await getSession();
const idToken = session?.idToken;
// Effacer la session de votre application
await destroySession();
// Rediriger vers l'endpoint end-session de Trousseau
const logoutUrl = new URL(
`${process.env.OIDC_ISSUER}end-session/`
);
logoutUrl.searchParams.set("id_token_hint", idToken);
logoutUrl.searchParams.set(
"post_logout_redirect_uri",
"https://app.yourapp.com/signed-out"
);
redirect(logoutUrl.toString());
}Backchannel Logout
Le Backchannel Logout permet à Trousseau de notifier votre application lorsqu'un utilisateur se déconnecte depuis une autre application connectée à Trousseau (ou directement depuis Trousseau).
Fonctionnement
- L'utilisateur se déconnecte d'une autre application connectée à Trousseau
- Trousseau envoie un JWT signé (
logout_token) à votre endpoint de backchannel logout via POST - Votre application valide le token et détruit toutes les sessions de cet utilisateur
Configuration
Enregistrez une URL de backchannel logout lors de l'intégration :
https://app.yourapp.com/api/auth/backchannel-logoutImplémentation de l'endpoint
export async function POST(request: Request) {
const body = await request.formData();
const logoutToken = body.get("logout_token") as string;
// 1. Valider la signature JWT via le JWKS de Trousseau
const payload = await validateLogoutToken(logoutToken);
// 2. Extraire le claim sub de l'utilisateur
const userId = payload.sub;
// 3. Détruire toutes les sessions de cet utilisateur
await destroyUserSessions(userId);
return new Response(null, { status: 200 });
}Claims du logout token
| Claim | Description |
|---|---|
iss | URL de l'émetteur Trousseau |
sub | Identifiant de l'utilisateur déconnecté |
aud | Votre client ID |
iat | Heure d'émission du token |
jti | Identifiant unique du token (prévention du rejeu) |
events | Contient http://schemas.openid.net/event/backchannel-logout |
Validez toujours la signature du logout token avant de le traiter. Un token non validé pourrait être utilisé pour déconnecter de force vos utilisateurs.
Bonnes pratiques
- Implémentez au minimum le RP-Initiated Logout
- Stockez l'
id_tokendans la session serveur pour le rendre disponible au moment de la déconnexion - Implémentez le Backchannel Logout pour une meilleure expérience utilisateur dans l'écosystème
- Retournez HTTP 200 depuis l'endpoint backchannel même si l'utilisateur n'a pas de session active (idempotence)