# TDC114PLUS Headless/PKCE 계약 차이 검토 작성일: 2026-07-09 상태: 정책 재정렬 완료, headless 직접 호출은 기본 흐름에서 제외 2026-07-09 결론: - TDC114PLUS 앱의 기본 로그인은 `Baron SSO Hosted Login + OIDC Authorization Code + PKCE`다. - 앱은 `/api/v1/auth/headless/...` API를 직접 호출하지 않는다. - 이 문서는 headless 직접 호출을 검토하던 시점의 계약 차이를 보존하되, 현재 실행 기준으로는 `참고/레거시 검토 문서`로 본다. ## 1. 확인된 RP 설정 - RP 유형: PKCE 공개 클라이언트 - Client ID: `39d6190d-72f6-4a58-a84f-cdc5ece3e8af` - Redirect URI: `https://114.hmac.kr/auth/callback` - Client Secret: 없음 - OIDC issuer: `https://sso.hmac.kr/oidc` ## 2. 확인된 표준 OIDC 기능 Discovery 문서에서 아래 기능을 확인했다. - authorization code grant - token endpoint 인증 방식 `none` - PKCE `S256` - authorization, token, userinfo endpoint 따라서 공개 모바일 앱이 Client Secret 없이 PKCE verifier로 authorization code를 교환하는 표준 흐름은 지원된다. ## 3. Headless API 계약 차이 공식 Swagger의 아래 API는 `client_assertion`을 필수로 요구한다. - `POST /api/v1/auth/headless/phone-login` - `POST /api/v1/auth/headless/link/poll` Swagger는 `client_assertion`을 `private_key_jwt`라고 정의한다. 이를 모바일 앱이 직접 생성하려면 RP 개인키가 APK에 포함되어야 하므로 공개 PKCE 앱 보안 모델과 맞지 않는다. ## 4. 적용 정책 - Client ID는 공개 식별자이므로 APK에 포함한다. - Client Secret 또는 `private_key_jwt` 서명용 개인키는 APK에 포함하지 않는다. - 표준 PKCE 생성, state 검증, authorization code 교환은 앱에 구현한다. - 앱은 Baron SSO authorization endpoint를 열고, Baron SSO Hosted Login 화면이 휴대폰번호 입력과 문자/메일 링크 인증을 처리하게 한다. - headless API 직접 호출은 현재 앱 기본 구현에서 제외한다. - 추후 별도 신뢰 백엔드가 생기거나 Baron SSO가 모바일 공개 RP용 headless 계약을 제공하는 경우에만 별도 feature로 재검토한다. ## 5. Baron SSO 확인 요청 아래 질문은 앱이 headless API를 직접 호출해야 한다는 전제가 다시 살아날 때만 유효하다. 1. PKCE 공개 RP에서 `client_assertion` 생략이 가능한지 2. 불가능하다면 단기 assertion 발급 endpoint가 있는지 3. assertion의 issuer, subject, audience, 만료시간, 서명 알고리즘 4. `login_challenge`를 모바일 앱이 얻는 공식 절차 5. headless 승인 완료 후 `redirectTo`와 PKCE callback 연결 절차