2.8 KiB
2.8 KiB
Baron SSO Server-Side App Demo (Express.js)
이 프로젝트는 baron-sso의 server-side-app RP를 테스트하기 위한 단순한 Express.js 데모입니다.
목적
이 데모는 다음을 확인하기 위한 용도입니다.
- confidential client 기반 OIDC Authorization Code 로그인
- RP 로컬 세션 생성 및 유지
Back-Channel Logout URI호출 수신logout_token검증 후 로컬 세션 즉시 파기
사전 준비
baron-sso프로젝트가 실행 중이어야 합니다.baron_net네트워크가 생성되어 있어야 합니다.- devfront에서
server-side-app타입 RP를 생성해야 합니다.
권장 RP 설정
예시:
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 서비스명을 사용해야 합니다.
실행
docker-compose up --build
환경 변수
PORT: 기본값4444SESSION_SECRET: Express session secretOIDC_ISSUER_URL: Baron OIDC issuer URLOIDC_CLIENT_ID: server-side-app client idOIDC_CLIENT_SECRET: server-side-app client secretOIDC_REDIRECT_URI: callback URLOIDC_CLIENT_AUTH_METHOD: 기본값client_secret_basic, 필요 시client_secret_postBARON_API_BASE_URL: Baron backend/public gateway URLBARON_BACKCHANNEL_JWKS_URL: Baron Back-Channel Logout JWKS URLBARON_SESSION_VALIDATION_ENABLED:false로 두면 Baron 세션 재검증을 끄고 백채널 로그아웃만 단독 검증 가능
라우트
GET /
GET /login
GET /callback
GET /profile
GET /logout
POST /backchannel-logout
동작 방식
/login에서 state/nonce를 만들고 Baron authorize endpoint로 이동/callback에서 authorization code를 token으로 교환- ID Token의
sid/sub를 현재 RP 세션 ID와 매핑 - Baron이
/backchannel-logout으로logout_token전송 - 데모 앱이 서명 및 claim을 검증
sid또는sub로 대상 세션을 찾아 세션 스토어에서 직접 파기
테스트 포인트
정상 동작 시 아래 로그 흐름이 보여야 합니다.
[로그인 시작]
[콜백] Authorization Code -> Token 교환 성공
[세션 매핑] 등록 완료
[백채널 로그아웃] 요청 수신
[백채널 로그아웃] 토큰 검증 성공
[백채널 로그아웃] 세션 파기 완료
[백채널 로그아웃] 처리 완료
[프로필] 비로그인 상태로 접근하여 루트로 이동