Files
pkce-login-demo/README.md
2026-05-06 10:52:59 +09:00

3.1 KiB

Baron SSO Login Demo (Express.js)

이 프로젝트는 baron-sso의 OIDC 로그인을 테스트하기 위한 단순한 Expressjs 데모 페이지입니다.

사전 준비

  1. baron-sso 프로젝트가 실행 중이어야 합니다.
  2. baron_net 네트워크가 생성되어 있어야 합니다.

1. OIDC 클라이언트 등록

baron-sso 프로젝트 폴더에서 다음 명령을 실행하여 데모용 클라이언트를 Hydra에 등록합니다.

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)에서 다음 명령을 실행합니다.

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 입니다.

세션 종료 / 연동 해지 동작

이 데모 앱은 두 경로로 로그아웃을 반영합니다.

  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 URIhttp://localhost:3000/backchannel-logout 또는 외부 접근 가능한 주소로 설정해야 합니다.
  • Baron 서버가 해당 데모 앱 주소에 직접 접근 가능해야 합니다.
  • 로그인 후 ID Token의 sid 또는 sub를 기준으로 RP 세션이 메모리에 매핑됩니다.

따라서 다음 상황을 테스트할 수 있습니다.

  • UserFront에서 세션 종료 후 Baron이 RP에 백채널 로그아웃을 전송하는지
  • UserFront에서 연동 해지 후 RP 세션이 즉시 파기되는지
  • RP 보호 페이지 접근 시 이미 로그아웃 상태인지