1
0
forked from baron/baron-sso
Files
baron-sso/docs/hydra-rp-consent-try.md

2.2 KiB

Hydra RP Consent 시도 기록

목표

  • 샘플 RP(52a597f0-5b06-4fcb-b804-93e88a56a75a)와 사용자(b24051@hanmaceng.co.kr, Kratos ID: 22607c1b-bfbf-4a90-9505-36b348472e7a) 사이에 Hydra consent 세션을 생성.

시도한 방법과 실패 원인

1) hydra 컨테이너 내부에서 sh 실행 후 스크립트 수행

  • 시도: docker exec -i ory_hydra sh -lc '...'
  • 실패: sh가 존재하지 않음 (Hydra 컨테이너가 distroless 이미지).
  • 원인: 쉘 바이너리 미포함.
  • 시도 흐름:
    1. /oauth2/auth 호출로 login_challenge 획득
    2. Admin API로 login_challenge 수락
    3. login_accept.redirect_to(보통 http://127.0.0.1:3000/...)로 이동해 consent_challenge 추출
  • 실패: login_accept.redirect_to가 **consent app(127.0.0.1:3000)**로 향하는데, 해당 서비스가 떠 있지 않아 접근 불가.
  • 원인: consent app가 실행 중이 아니라 127.0.0.1:3000 접속 실패.
  • 실패: 위와 동일하게 consent app 경로를 직접 호출하게 되어 연결 실패.
  • 원인: consent app 미기동.

4) DCR(동적 클라이언트 등록) 시 metadata 포함 시도

  • 실패: invalid_client_metadata (DCR에서는 metadata를 설정할 수 없음)
  • 원인: Hydra DCR 정책 제한.

요약

  • 핵심 실패 원인은 consent app(로그인/동의 UI)이 실행 중이 아니라서 redirect_to를 따라가면 접속이 불가능한 점.
  • distroless 이미지로 인해 docker exec로 쉘 스크립트를 바로 실행할 수 없음.

다음 시도(새 방식)

  • consent app로 직접 이동하지 않고, Hydra public endpoint에서 login_verifier를 이용해 consent_challenge를 추출한 뒤 Admin API로 수락.
  • 흐름:
    1. /oauth2/authlogin_challenge
    2. /oauth2/auth/requests/login/acceptlogin_verifier
    3. /oauth2/auth?client_id=...&login_verifier=... 호출 → Location 헤더에서 consent_challenge 추출
    4. /oauth2/auth/requests/consent/accept 호출