forked from baron/baron-sso
백채널 로그아웃 문서 통일
This commit is contained in:
@@ -21,71 +21,6 @@ Baron SSO는 모든 RP에 대해 같은 방식으로 `POST /backchannel-logout`
|
||||
- `server-side-app RP`
|
||||
- `headless login RP`는 `PKCE` 기반 custom login UI 변형
|
||||
|
||||
## Polling과 Session Management
|
||||
|
||||
`polling`에 가장 가까운 OIDC 개념은 **Back-Channel Logout**이 아니라 **OpenID Connect Session Management**입니다.
|
||||
|
||||
이 방식은 RP 서버가 OP 서버를 주기적으로 polling하는 구조가 아니라, **RP 브라우저 화면 안에서 OP의 `check_session_iframe`과 통신하면서 OP 세션 상태 변화 여부를 확인**하는 구조입니다.
|
||||
|
||||
개념적으로는 다음과 같습니다.
|
||||
|
||||
```text
|
||||
RP 브라우저 화면
|
||||
↓ 주기적으로 확인
|
||||
OP check_session_iframe
|
||||
↓
|
||||
changed / unchanged / error
|
||||
↓
|
||||
changed면 RP가 재인증 또는 로그아웃 처리
|
||||
```
|
||||
|
||||
즉, 이건 브라우저 기반 front-channel/iframe 방식이지, RP 서버가 OP 서버에 주기적으로 polling하는 Back-Channel Logout 방식은 아닙니다.
|
||||
|
||||
### Session Management를 쓸 때의 의미
|
||||
|
||||
Session Management를 도입하면 RP는 브라우저를 통해 OP 세션 상태 변화를 감지하고, 상태가 바뀌면 로컬 세션을 정리하거나 재인증을 유도합니다.
|
||||
|
||||
일반적인 흐름은 다음과 같습니다.
|
||||
|
||||
1. 로그인 시 RP가 OP 세션 식별에 필요한 정보를 보관합니다.
|
||||
2. RP 화면이 `check_session_iframe` 상태를 주기적으로 확인합니다.
|
||||
3. OP 세션이 바뀌면 `changed`를 받습니다.
|
||||
4. RP가 로컬 세션을 삭제하거나 재인증을 시작합니다.
|
||||
|
||||
### Session Management 기반 로직 구성 예시
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
autonumber
|
||||
participant Browser as RP Browser
|
||||
participant RP as RP App
|
||||
participant IFrame as OP check_session_iframe
|
||||
participant Store as RP Session Store
|
||||
|
||||
loop 주기적 확인
|
||||
Browser->>IFrame: session state check
|
||||
IFrame-->>Browser: changed / unchanged / error
|
||||
alt unchanged
|
||||
Browser->>RP: 로컬 세션 유지
|
||||
else changed
|
||||
Browser->>RP: 재인증 또는 로그아웃 유도
|
||||
RP->>Store: session destroy
|
||||
RP->>RP: 세션 매핑 제거
|
||||
else error
|
||||
Browser->>RP: 재시도 또는 안전 로그아웃
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
권장 구성은 다음과 같습니다.
|
||||
|
||||
1. 로그인 시 `sid` 또는 `sub`를 RP 세션에 저장합니다.
|
||||
2. RP 화면이 `check_session_iframe` 상태를 주기적으로 확인합니다.
|
||||
3. `changed`가 오면 RP가 로컬 세션을 삭제하거나 재인증을 시작합니다.
|
||||
4. `error`가 반복되면 안전하게 로그아웃 처리하는 정책을 둘 수 있습니다.
|
||||
|
||||
이 방식은 `Back-Channel Logout`과 별개로 설계하는 것이 좋습니다.
|
||||
|
||||
## 공통 시퀀스
|
||||
|
||||
아래 흐름은 세 RP에 공통입니다.
|
||||
|
||||
Reference in New Issue
Block a user