forked from baron/baron-sso
2.2 KiB
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 이미지). - 원인: 쉘 바이너리 미포함.
2) curlimages/curl 컨테이너를 hydra 네트워크에 붙여서 consent 생성 흐름 수행
- 시도 흐름:
/oauth2/auth호출로login_challenge획득- Admin API로
login_challenge수락 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 접속 실패.
3) login_accept.redirect_to를 그대로 호출해 Location 헤더에서 consent_challenge 추출 시도
- 실패: 위와 동일하게 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로 수락. - 흐름:
/oauth2/auth→login_challenge/oauth2/auth/requests/login/accept→login_verifier/oauth2/auth?client_id=...&login_verifier=...호출 → Location 헤더에서consent_challenge추출/oauth2/auth/requests/consent/accept호출