전화번호 로그인 요청/응답 처리

This commit is contained in:
2026-04-10 11:01:16 +09:00
parent 8fe4caa9a9
commit 022594f8dc
4 changed files with 216 additions and 99 deletions

View File

@@ -5,7 +5,7 @@
## 주요 특징
- **Headless 인증**: IdP가 제공하는 UI를 거치지 않고, RP(데모 앱)가 사용자 자격 증명을 직접 받아 백채널로 인증을 수행합니다.
- **동적 UI 전환**: 입력값(숫자 vs 문자)을 실시간으로 분석하여 '전화번호 인증' 또는 '사번 로그인' 모드로 자동 전환됩니다.
- **동적 UI 전환**: 입력값(숫자 vs 문자)을 실시간으로 분석하여 '전화번호 SSO 인증' 또는 '사번 로그인' 모드로 자동 전환됩니다.
- **Trusted RP 구현**:
- **OIDC Discovery**: `sso-test.hmac.kr`의 메타데이터를 동적으로 로드합니다.
- **JWKS Endpoint**: 서버 시작 시 생성된 RSA 공개키를 `/.well-known/jwks.json`을 통해 서빙하여 IdP와의 신뢰 관계를 형성합니다.
@@ -29,6 +29,9 @@ CLIENT_ID=15cfb85c-f75f-4b51-a13d-d04f87d39739
ISSUER=https://sso-test.hmac.kr/oidc
REDIRECT_URI=http://localhost:3000/callback
JWKS_URI=http://localhost:3000/.well-known/jwks.json
# 필요 시 전화번호용 headless link endpoint를 별도로 덮어쓸 수 있음
PHONE_HEADLESS_LINK_INIT_ENDPOINT=
PHONE_HEADLESS_LINK_POLL_ENDPOINT=
```
### 2. 의존성 설치
@@ -58,12 +61,14 @@ npm start
### 1. 입력값 분류 (Classify Input)
사용자가 입력한 값이 숫자만 포함되어 있으면 전화번호(`phone`) 모드로, 문자가 포함되어 있으면 사번(`employee`) 모드로 인식합니다.
- **Phone**: 인증 링크 발송 시뮬레이션 실행.
- **Phone**: 전화번호를 SSO headless 인증 흐름에 전달합니다.
- **Employee**: 비밀번호 입력란 노출 및 OIDC Password Grant 요청 실행.
### 2. OIDC Password Grant (Real Communication)
데모 앱은 사용자로부터 받은 `loginId``password`를 SSO 서버의 토큰 엔드포인트로 직접 전달합니다.
### 2. SSO Headless 인증 (Real Communication)
데모 앱은 사용자로부터 받은 식별자와 자격 증명을 SSO 서버의 headless 인증 엔드포인트로 직접 전달합니다.
- SSO 서버가 해당 방식을 허용하도록 설정되어 있어야 하며, 화이트리스트에 등록된 `REDIRECT_URI`와 일치해야 합니다.
- 전화번호 로그인은 `POST /api/v1/auth/headless/link/init`로 링크를 발송한 뒤 `POST /api/v1/auth/headless/link/poll`로 승인 완료를 기다리는 흐름입니다.
- 필요하면 `PHONE_HEADLESS_LINK_INIT_ENDPOINT``PHONE_HEADLESS_LINK_POLL_ENDPOINT`로 오버라이드할 수 있습니다.
## 라이선스
이 프로젝트는 내부 테스트 및 데모 목적으로 제작되었습니다.