SAML 싱글 로그아웃 플로
SAML 싱글 로그아웃 플로 (Single Logout)
SSO는 한 번 인증으로 여러 서비스를 드나들게 해주는데, 반대로 "한 번 로그아웃하면 전체 세션이 끝나게" 하려면 싱글 로그아웃이 필요해요. SAML의 **Single Logout Profile(단일 로그아웃 프로필)**은 그 목적을 위해 LogoutRequest와 LogoutResponse 메시지를 주고받는 흐름을 정의해요. SSO 세션에 참여한 모든 당사자(세션 참여자)가 함께 로그아웃되는 구조이지요.
출처: Profiles for the OASIS Security Assertion Markup Language (SAML) V2.0
본문
다섯 단계의 흐름
- 세션 참여자가 IdP로
<LogoutRequest>발행 — 로그아웃을 시작한 참여자(보통 SP)가 IdP에게 로그아웃 요청을 보내요. - IdP가 세션 참여자 결정 — IdP는 그 SSO 세션에 참여하고 있는 모든 당사자를 파악해요.
- IdP가 각 세션 참여자/권한자에게
<LogoutRequest>발행 — IdP는 찾아낸 각 참여자에게 로그아웃을 알려요. - 세션 참여자/권한자가 IdP로
<LogoutResponse>발행 — 각 참여자는 자신의 세션을 끝내고 IdP에 응답을 돌려줘요. - IdP가 최초 참여자에게
<LogoutResponse>발행 — IdP는 시작한 참여자에게 전체 결과를 담아 응답해요.
LogoutRequest와 LogoutResponse
이 프로필이 쓰는 메시지는 SAML Core 스펙의 Single Logout Protocol에서 정의돼요. LogoutRequest에는 어느 세션을 로그아웃할지 가리키는 SessionIndex가 담길 수 있고, 응답인 LogoutResponse는 각 단계에서 결과 상태를 돌려줘요.
- 세션 참여자(Session Participant) — SSO 세션에 참여해 사용자를 위한 보안 컨텍스트를 유지하는 엔티티예요.
- 세션 권한자(Session Authority) — 세션에 대한 정보를 갖고 있는 당사자로, IdP가 대표적이에요.
흐름을 그림으로 보면
세션 참여자(SP-A) IdP(세션 권한자) 세션 참여자(SP-B)
| | |
| 1. <LogoutRequest> | |
|----------------------->| |
| | 2. 참여자 결정 |
| |----------------------->|
| | 3. <LogoutRequest> |
| |<-----------------------|
| | 4. <LogoutResponse> |
| |<-----------------------|
| 5. <LogoutResponse> | |
|<-----------------------| |
프로토콜 사용 규칙
실전에서는 로그아웃 요청을 보낼 때 사용자가 어느 세션을 종료할지 SessionIndex로 특정하는 경우가 많아요. IdP가 이를 보고 실제 종료할 세션을 골라서, 참여자들이 남은 세션을 함께 정리하도록 유도하는 거예요. 이 플로가 끝나면 해당 사용자의 모든 서비스 세션이 한꺼번에 사라진다고 이해하면 돼요.
더 알아보기
- SAML 브라우저 SSO 플로 — 로그아웃의 반대편에 있는 인증 시작 흐름.
- SAML 어써션 — 세션과 사용자 신원을 담는
AuthnStatement. - SAML 바인딩 —
LogoutRequest/LogoutResponse를 전달하는 Redirect·POST 방식. - SAML 메타데이터 —
SingleLogoutService끝점을 선언하는 엔티티 문서.