forked from baron/baron-sso
내정보 페이지 사용성개선, adminFront user 정보 연동.
This commit is contained in:
39
docs/hydra-rp-consent-try.md
Normal file
39
docs/hydra-rp-consent-try.md
Normal file
@@ -0,0 +1,39 @@
|
||||
# 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 생성 흐름 수행
|
||||
- 시도 흐름:
|
||||
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 접속 실패.
|
||||
|
||||
### 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로 수락.
|
||||
- 흐름:
|
||||
1. `/oauth2/auth` → `login_challenge`
|
||||
2. `/oauth2/auth/requests/login/accept` → `login_verifier`
|
||||
3. `/oauth2/auth?client_id=...&login_verifier=...` 호출 → Location 헤더에서 `consent_challenge` 추출
|
||||
4. `/oauth2/auth/requests/consent/accept` 호출
|
||||
Reference in New Issue
Block a user