90 lines
2.8 KiB
Markdown
90 lines
2.8 KiB
Markdown
# Baron SSO Server-Side App Demo (Express.js)
|
|
|
|
이 프로젝트는 `baron-sso`의 `server-side-app` RP를 테스트하기 위한 단순한 Express.js 데모입니다.
|
|
|
|
## 목적
|
|
|
|
이 데모는 다음을 확인하기 위한 용도입니다.
|
|
|
|
1. confidential client 기반 OIDC Authorization Code 로그인
|
|
2. RP 로컬 세션 생성 및 유지
|
|
3. `Back-Channel Logout URI` 호출 수신
|
|
4. `logout_token` 검증 후 로컬 세션 즉시 파기
|
|
|
|
## 사전 준비
|
|
|
|
1. `baron-sso` 프로젝트가 실행 중이어야 합니다.
|
|
2. `baron_net` 네트워크가 생성되어 있어야 합니다.
|
|
3. devfront에서 `server-side-app` 타입 RP를 생성해야 합니다.
|
|
|
|
## 권장 RP 설정
|
|
|
|
예시:
|
|
|
|
```text
|
|
Type: server-side-app
|
|
Client ID: <생성된 client id>
|
|
Client Secret: <생성된 secret>
|
|
Redirect URI: http://localhost:4444/callback
|
|
Back-Channel Logout URI: http://172.16.x.x:4444/backchannel-logout
|
|
SID Claim Required: off
|
|
```
|
|
|
|
주의:
|
|
- `Back-Channel Logout URI`는 브라우저 기준이 아니라 Baron backend가 실제로 접근 가능한 주소여야 합니다.
|
|
- Docker 환경에서 `localhost`는 backend 컨테이너 자신을 가리킬 수 있으므로, 필요하면 사설 IP 또는 Docker 서비스명을 사용해야 합니다.
|
|
|
|
## 실행
|
|
|
|
```bash
|
|
docker-compose up --build
|
|
```
|
|
|
|
## 환경 변수
|
|
|
|
- `PORT`: 기본값 `4444`
|
|
- `SESSION_SECRET`: Express session secret
|
|
- `OIDC_ISSUER_URL`: Baron OIDC issuer URL
|
|
- `OIDC_CLIENT_ID`: server-side-app client id
|
|
- `OIDC_CLIENT_SECRET`: server-side-app client secret
|
|
- `OIDC_REDIRECT_URI`: callback URL
|
|
- `OIDC_CLIENT_AUTH_METHOD`: 기본값 `client_secret_basic`, 필요 시 `client_secret_post`
|
|
- `BARON_API_BASE_URL`: Baron backend/public gateway URL
|
|
- `BARON_BACKCHANNEL_JWKS_URL`: Baron Back-Channel Logout JWKS URL
|
|
- `BARON_SESSION_VALIDATION_ENABLED`: `false`로 두면 Baron 세션 재검증을 끄고 백채널 로그아웃만 단독 검증 가능
|
|
|
|
## 라우트
|
|
|
|
```text
|
|
GET /
|
|
GET /login
|
|
GET /callback
|
|
GET /profile
|
|
GET /logout
|
|
POST /backchannel-logout
|
|
```
|
|
|
|
## 동작 방식
|
|
|
|
1. `/login`에서 state/nonce를 만들고 Baron authorize endpoint로 이동
|
|
2. `/callback`에서 authorization code를 token으로 교환
|
|
3. ID Token의 `sid/sub`를 현재 RP 세션 ID와 매핑
|
|
4. Baron이 `/backchannel-logout`으로 `logout_token` 전송
|
|
5. 데모 앱이 서명 및 claim을 검증
|
|
6. `sid` 또는 `sub`로 대상 세션을 찾아 세션 스토어에서 직접 파기
|
|
|
|
## 테스트 포인트
|
|
|
|
정상 동작 시 아래 로그 흐름이 보여야 합니다.
|
|
|
|
```text
|
|
[로그인 시작]
|
|
[콜백] Authorization Code -> Token 교환 성공
|
|
[세션 매핑] 등록 완료
|
|
[백채널 로그아웃] 요청 수신
|
|
[백채널 로그아웃] 토큰 검증 성공
|
|
[백채널 로그아웃] 세션 파기 완료
|
|
[백채널 로그아웃] 처리 완료
|
|
[프로필] 비로그인 상태로 접근하여 루트로 이동
|
|
```
|