71 lines
3.3 KiB
Markdown
71 lines
3.3 KiB
Markdown
# Baron SSO Login Demo (Express.js)
|
|
|
|
이 프로젝트는 `baron-sso`의 OIDC 로그인을 테스트하기 위한 단순한 Expressjs 데모 페이지입니다.
|
|
|
|
## 사전 준비
|
|
|
|
1. `baron-sso` 프로젝트가 실행 중이어야 합니다.
|
|
2. `baron_net` 네트워크가 생성되어 있어야 합니다.
|
|
|
|
## 1. OIDC 클라이언트 등록
|
|
|
|
`baron-sso` 프로젝트 폴더에서 다음 명령을 실행하여 데모용 클라이언트를 Hydra에 등록합니다.
|
|
|
|
```bash
|
|
docker exec ory_hydra \
|
|
hydra create oauth2-client \
|
|
--endpoint http://127.0.0.1:4445 \
|
|
--id demo-client \
|
|
--secret demo-secret \
|
|
--grant-type authorization_code,refresh_token \
|
|
--response-type code \
|
|
--scope openid,offline_access,profile,email \
|
|
--redirect-uri http://localhost:3000/callback
|
|
```
|
|
|
|
## 2. 데모 페이지 실행
|
|
|
|
이 폴더(`baron-sso-login-demo`)에서 다음 명령을 실행합니다.
|
|
|
|
```bash
|
|
docker-compose up --build
|
|
```
|
|
|
|
## 3. 테스트
|
|
|
|
1. 브라우저에서 `http://localhost:3000`에 접속합니다.
|
|
2. "Login with Baron SSO" 버튼을 클릭합니다.
|
|
3. `baron-sso` 로그인 화면으로 리다이렉트되면 로그인을 진행합니다.
|
|
4. 로그인 성공 후 사용자 프로필 정보가 표시되는지 확인합니다.
|
|
|
|
## 환경 변수 설정 (.env)
|
|
|
|
필요에 따라 `.env` 파일을 생성하여 설정을 변경할 수 있습니다.
|
|
|
|
- `OIDC_ISSUER_URL`: Baron SSO의 OIDC Issuer URL (기본값: `http://localhost:5000/oidc`)
|
|
- `OIDC_CLIENT_ID`: 등록한 클라이언트 ID
|
|
- `OIDC_CLIENT_SECRET`: 등록한 클라이언트 시크릿
|
|
- `OIDC_REDIRECT_URI`: 콜백 URL
|
|
- `BARON_API_BASE_URL`: Baron Backend/Public Gateway 기준 URL. 기본적으로 `OIDC_ISSUER_URL`에서 `/oidc`를 제거한 값을 사용합니다.
|
|
- `BARON_BACKCHANNEL_JWKS_URL`: Baron이 서명한 `logout_token` 검증용 JWKS URL. 기본값은 `<BARON_API_BASE_URL>/api/v1/auth/backchannel/jwks.json` 입니다.
|
|
- `BARON_SESSION_VALIDATION_ENABLED`: `false`로 두면 기존의 요청 시 Baron 세션 재검증을 끄고, Back-Channel Logout만으로 세션 종료를 확인할 수 있습니다. 기본값은 `true`입니다.
|
|
|
|
## 세션 종료 / 연동 해지 동작
|
|
|
|
이 데모 앱은 두 경로로 로그아웃을 반영합니다.
|
|
|
|
1. 기본 경로: 각 요청마다 Baron의 `GET /api/v1/user/me`를 Bearer token으로 호출하여 현재 Baron 세션이 아직 유효한지 다시 확인합니다. Baron 세션이 무효하면 다음 요청에서 로컬 세션을 정리합니다.
|
|
2. Back-Channel Logout 경로: `POST /backchannel-logout` 엔드포인트에서 Baron이 전송한 `logout_token`을 검증하고, `sid` 또는 `sub`에 매핑된 `express-session` 세션을 즉시 파기합니다.
|
|
|
|
### Back-Channel Logout 테스트 전제
|
|
|
|
- DevFront에서 대상 RP에 `Back-Channel Logout URI`를 `http://localhost:3000/backchannel-logout` 또는 외부 접근 가능한 주소로 설정해야 합니다.
|
|
- Baron 서버가 해당 데모 앱 주소에 직접 접근 가능해야 합니다.
|
|
- 로그인 후 ID Token의 `sid` 또는 `sub`를 기준으로 RP 세션이 메모리에 매핑됩니다.
|
|
|
|
따라서 다음 상황을 테스트할 수 있습니다.
|
|
|
|
- UserFront에서 `세션 종료` 후 Baron이 RP에 백채널 로그아웃을 전송하는지
|
|
- UserFront에서 `연동 해지` 후 RP 세션이 즉시 파기되는지
|
|
- RP 보호 페이지 접근 시 이미 로그아웃 상태인지
|