인증 방법
개요
dta-wide API는 두 가지 주요 인증 방식을 사용합니다.
인증 유형
1. 앱 인증
앱 인증은 모바일 애플리케이션이 dta-wide 백엔드 서버와 통신하기 전에 수행되는 첫 번째 보안 계층입니다. 이 과정은 정당한 클라이언트 앱만이 API에 접근할 수 있도록 보장합니다.
- 디바이스 ID와 시간 기반 챌린지-응답 메커니즘 사용
- 앱 토큰 발급 및 관리
- 사용자 로그인 전에 필수적으로 완료해야 함
2. 사용자 인증
사용자 인증은 개별 사용자의 신원을 확인하고 해당 사용자에게 적절한 권한과 자원에 대한 접근을 제공합니다.
- JSON Web Token(JWT) 기반 인증
- 액세스 토큰 및 리프레시 토큰 관리
- 사용자별 인증 상태 및 권한 관리
인증 방식 활용
-
앱 출시 후 최초 실행 시:
- 앱 인증을 통해 appToken 획득
- appToken으로 공개 API 호출 가능
-
사용자 로그인 시:
- 앱 인증 상태에서 사용자 로그인 수행
- accessToken 및 refreshToken 획득
-
보호된 리소스 접근 시:
- 사용자 accessToken으로 인증 필요 API 호출
- 토큰 만료 시 refreshToken으로 갱신
v2 EU 인증 정책
EU 환자용 v2 인증 표면은 다음 6가지 정책을 따릅니다 — v1(KR password 기반) 과 차이가 큽니다.
1. Authorization: Bearer 단일 채널
모든 v2 EU endpoint 는 인증을 Authorization: Bearer <token> 한 줄로만 받습니다. 별도 헤더를 보내도 무시되며 인증 의미를 갖지 않습니다.
토큰 종류는 endpoint 마다 다릅니다:
| Endpoint 분류 | Authorization Bearer | 가드 |
|---|---|---|
/v2/auth/app/* (토큰 발급) | 없음 | 없음 (공개) |
/v2/auth/email/*, /v2/security/appcheck/verify | app token | app token 검증 |
/v2/auth/register/eid/*, /v2/auth/register/native/* | app token | app token 검증 |
/v2/auth/eid/login/*, /v2/auth/login/native/* | app token 또는 user access token (분기) | 서버 라우팅 |
/v2/auth/user-cycle/activate, /v2/auth/user-cycle/state | user access token | 사용자 토큰 검증 |
서버 라우팅 는 Authorization Bearer 의 payload 종류를 보고 app token = first-login / 새 기기 첫 로그인, user access token = 재로그인 분기로 라우팅합니다.
2. deviceId 는 token payload 에서
/v2/auth/app/challenge·complete-challenge (토큰 발급 단계)만 body 로 deviceId(객체)+deviceIdHash 를 받습니다. 그 이후의 모든 v2 EU endpoint 는 deviceId 를 token payload(request.appPayload.deviceId 또는 request.user.deviceId)에서 가져옵니다 .
body 에 deviceId 를 포함하면 forbidNonWhitelisted 정책에 의해 400 VALIDATION_ERROR 가 반환됩니다. 이는 client 가 token 과 무관하게 deviceId 를 위조할 수 있던 surface 를 차단하기 위한 의도된 변경입니다.
3. AppCheck 는 verify-only
POST /v2/security/appcheck/verify 는 토큰을 검증하고 {verified, reason?} 만 반환합니다. 세션토큰(appCheckSessionToken) 발급 없음, 보호 endpoint 에 X-AppCheck-Session-Token 헤더 없음. 앱 부팅 후 한 번 호출해 attest 를 통과시키면 됩니다.
4. signup ack-only + first-login 분리 (4-STAGE 흐름)
EU 가입은 4 STAGE 로 분리됩니다:
- 회원가입 (ack-only):
/v2/auth/register/{eid,native}/complete가 User+Profile(+EidLink/+디바이스 키) 생성만 수행하고 응답{success:true}만 반환. 토큰 미발급. - 첫 로그인 (first-login):
/v2/auth/eid/login/complete(Authorization=app token + body LOGIN OTP) 또는/v2/auth/login/native/complete(Authorization=app token + body signature) 가 첫 access/refresh 를 발급. 이 시점은 REGISTERED 상태이므로 token payload 에uci가 없습니다. - 서비스 활성화:
/v2/auth/user-cycle/activate(Authorization=user access token) 가 UserCycle 을 생성하고uci가 박힌 토큰을 재발급합니다 (SERVICE_STARTED). - 재로그인 / 새 기기 첫 로그인: 활성 사용자의 후속 로그인.
Authorization토큰 종류로 분기합니다.
가입과 토큰 발급을 분리해서 (a) AppCheck failure 가 가입 자체를 막지 않게 했고, (b) 토큰 발급 책임을 LoginResponseBuilder 에 단일화했습니다.
5. �� AccessCode 는 서비스 활성화 시점
v2 가입에서는 accessCode 를 받지 않습니다 . 가입 단계의 cohort 는 항상 standard 이고, clinical cohort 분기와 AccessCode 검증은 /v2/auth/user-cycle/activate 에서 수행됩니다.
6. Endpoint 경로
- 옛 표기
/v2/auth/signup/eid/*는 폐기 — 모두/v2/auth/register/eid/*로 통일. - Native 2FA 가입/로그인은 별도 endpoint 묶음 (
/v2/auth/register/native/*,/v2/auth/login/native/*).
더 자세히
- API 레퍼런스:
- 도메인 마스터 문서: auth domain endpoints.md 10·11·12
- 모바일 통합 가이드: mobile-integration-eid-signup.md