SSO·SLO 개념과 프론트엔드 경계 정리
로그인과 로그아웃을 다루다 보면 SSO, SLO, IdP, SP 같은 용어를 자주 만나게 된다. 처음에는 비슷해 보이지만, 실제로는 각자가 담당하는 영역이 다르다.
SSO란?
SSO는 Single Sign-On의 약자다.
말 그대로 한 번 로그인하면 여러 서비스에 다시 로그인하지 않아도 되는 구조를 말한다.
예를 들어 어떤 쇼핑몰에서 Google로 로그인, Apple로 로그인, 카카오로 로그인, 네이버로 로그인 버튼을 제공한다고 하자. 사용자는 쇼핑몰에 직접 아이디와 비밀번호를 입력하지 않고, 이미 가지고 있는 Google, Apple, 카카오, 네이버 계정으로 로그인할 수 있다.
이때 Google, Apple, 카카오, 네이버처럼 사용자의 신원을 확인해주는 쪽을 IdP라고 부른다.
IdP와 SP
IdP는 Identity Provider의 약자다. 사용자가 누구인지 인증해주는 주체다.
SP는 Service Provider의 약자다. 사용자가 실제로 이용하려는 서비스다.
예를 들면 다음과 같다.
| 상황 | IdP | SP |
|---|---|---|
| 쇼핑몰에서 Google로 로그인 | 쇼핑몰 | |
| 앱에서 Apple로 로그인 | Apple | 해당 앱 |
| 커뮤니티에서 카카오로 로그인 | 카카오 | 커뮤니티 서비스 |
| 웹사이트에서 네이버로 로그인 | 네이버 | 해당 웹사이트 |
SSO 흐름은 대략 이렇게 이어진다.
중요한 점은 서비스가 사용자의 비밀번호를 직접 검증하지 않는다는 것이다. 사용자의 신원 확인은 IdP가 담당하고, 서비스는 그 결과를 받아 세션을 구성한다.
SLO란?
SLO를 검색하면 Single Logon으로 풀이한 글이 종종 보인다. 나도 한동안 그렇게 알고 있었다. SSO와 비슷하게 중앙 인증으로 로그인하는 흐름을 가리키는 말이라고 생각했다.
인증 표준 문서를 직접 찾아보고 나서야 정식 명칭이 Single Logout이라는 걸 알게 됐다. 한 곳에서 로그아웃했을 때 관련된 다른 서비스 세션까지 함께 종료하는 개념이다.
| 약어 | 정식 명칭 |
|---|---|
| SSO | Single Sign-On |
| SLO | Single Logout |
Single Logout으로서의 SLO
표준적인 의미의 SLO는 로그아웃 전파에 가깝다.
사용자가 하나의 서비스에서 로그아웃했을 때 기대할 수 있는 동작은 다음과 같다.
- 현재 서비스의 세션을 종료한다.
- IdP의 로그인 세션도 종료한다.
- 같은 IdP를 통해 로그인한 다른 서비스에도 로그아웃을 전파한다.
하지만 실제 실무에서는 이 흐름이 항상 완벽하게 동작하지 않는다.
서비스마다 세션을 별도로 관리하고, 브라우저 쿠키 정책이나 리다이렉트 방식도 다르다. 또한 각 서비스가 SLO를 제대로 지원해야만 로그아웃 전파가 가능하다.
그래서 많은 시스템은 다음 중 하나의 방식으로 타협한다.
| 구성 | 설명 |
|---|---|
| SSO만 적용 | 로그인은 중앙 인증으로 처리하지만 로그아웃은 서비스별로 처리 |
| SSO + 서비스 세션 로그아웃 | 현재 서비스의 서버 세션만 무효화 |
| SSO + IdP 로그아웃 | 현재 서비스 세션을 끊고 IdP 로그아웃 URL로 이동 |
| SSO + SLO | IdP와 여러 SP 간 로그아웃 전파까지 구현 |
| SSO + 짧은 세션 정책 | 완전한 SLO 대신 세션 만료, 재인증, MFA 등으로 보완 |
프론트엔드가 제어할 수 있는 것
SSO와 SLO의 핵심은 프론트엔드가 아니라 IdP와 백엔드가 담당한다.
프론트엔드는 보통 다음 역할을 한다.
- 미인증 사용자를 로그인 URL로 리다이렉트한다.
- 로그인 후 돌아온 사용자에 대해
/me같은 API로 세션 상태를 확인한다. - 인증 실패, 예를 들어 401 응답을 받으면 다시 로그인 URL로 보낸다.
- 로그아웃 버튼을 누르면 백엔드 로그아웃 API를 호출한다.
- 로그아웃 후 클라이언트 상태를 정리한다.
- 같은 브라우저의 다른 탭이나 앱에 로그아웃 이벤트를 전파한다.
- 필요하다면 IdP 로그아웃 URL로 이동시킨다.
반대로 프론트엔드가 직접 처리할 수 없는 영역도 있다.
- 사용자의 비밀번호 검증
- MFA 같은 실제 인증 절차
- 인증 토큰 또는 서버 세션 발급
- 서버 세션 무효화
- IdP 세션 종료
- 다른 서비스의 세션 종료 보장
프론트엔드는 SSO/SLO를 직접 수행한다기보다, 인증 시스템과 백엔드가 제공하는 흐름에 맞춰 사용자를 이동시키고 화면 상태를 동기화한다.
프론트엔드의 로그아웃 동기화는 SLO일까?
프론트엔드에서 BroadcastChannel, localStorage 이벤트, SharedWorker 등을 사용해 로그아웃 이벤트를 다른 탭에 전파하는 경우가 있다.
사용자가 A 탭에서 로그아웃하면, 같은 브라우저의 B 탭도 이를 감지해서 로그인 화면으로 이동하는 방식이다.
이 기능은 사용자 경험 측면에서 쓸모가 있다. 하지만 이것만으로 표준적인 의미의 SLO라고 보기는 어렵다.
이 기능의 정확한 역할은 다음에 가깝다.
| 기능 | 의미 |
|---|---|
| 프론트 로그아웃 브로드캐스트 | 같은 브라우저 내 탭/앱 간 로그아웃 상태 동기화 |
| 서버 로그아웃 API | 현재 서비스의 서버 세션 무효화 |
| IdP 로그아웃 | 중앙 인증 제공자의 로그인 세션 종료 |
| Single Logout | IdP와 여러 서비스 간 로그아웃 전파 |
그래서 프론트엔드의 로그아웃 브로드캐스트를 설명할 때는 이렇게 표현하는 것이 정확하다.
프론트엔드에서는 동일 브라우저 컨텍스트 내 앱/탭 간 로그아웃 상태를 동기화한다. 실제 서버 세션 무효화는 백엔드 로그아웃 API에서 처리하며, IdP 레벨의 Single Logout 보장은 별도 연동 여부에 따른다.
예시 흐름
일반적인 웹 애플리케이션에서 볼 수 있는 SSO와 로그아웃 흐름은 다음과 같다.
로그인
로그아웃
이 흐름에서 로그아웃 API 호출부터 쿠키 삭제까지는 서버 세션 로그아웃이고, 다른 탭 전파는 프론트엔드 동기화다. 마지막에 IdP 세션까지 종료한다면 IdP 로그아웃에 가까워진다. 다른 서비스까지 로그아웃 전파가 보장된다면 Single Logout이라고 부를 수 있다.
결국 프론트엔드가 서는 자리
SSO는 로그인 편의성과 중앙 인증을 위한 구조다. 사용자는 한 번 인증하고 여러 서비스를 이용할 수 있다. SLO는 로그아웃 전파를 의미한다. Single Logon으로 잘못 알기 쉽지만, 정식 명칭은 Single Logout이다.
프론트엔드는 SSO/SLO의 핵심 인증 로직을 직접 제어하지 않는다. 대신 로그인 리다이렉트, 세션 확인, 로그아웃 API 호출, 클라이언트 상태 정리, 탭 간 로그아웃 동기화를 담당한다.
그래서 실무에서 가장 안전한 표현은 다음과 같다.
SSO/SLO의 핵심 처리는 IdP와 백엔드가 담당한다. 프론트엔드는 인증 흐름에 맞춰 리다이렉트와 클라이언트 상태 동기화를 수행한다.