OAuth API모바일 네이티브 로그인 API
POST /ai/oauth/native/google
Google 네이티브 SDK 의 idToken 을 검증하고 JWT 발급
Google 네이티브 로그인
iOS / Android Google Sign-In SDK 가 발급한 idToken 을 백엔드에서 검증한 뒤 자체 JWT 를 발급합니다.
| 항목 | 값 |
|---|---|
| 메서드 | POST |
| 경로 | /ai/oauth/native/google |
| 인증 | 없음 (token 자체가 인증) |
요청
POST /ai/oauth/native/google
Content-Type: application/json
{
"idToken": "<Google idToken>",
"device": "APP"
}요청 바디
| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
idToken | string | 예 | GoogleSignIn-iOS / Android SDK 의 idToken (JWT 형식) |
device | string | 예 | 항상 "APP" |
검증 동작
백엔드는 Google JWKS (https://www.googleapis.com/oauth2/v3/certs) 로 idToken 의 다음 항목을 검증합니다:
- 서명 — Google 비밀키로 서명되었는지
aud(audience) — 발급된 client_id 가 등록된 iOS / Android / Web client_id 중 하나와 일치하는지iss(issuer) —https://accounts.google.com또는accounts.google.com인지exp(expiry) — 만료되지 않았는지
검증 통과 시 payload 에서 sub, email, name 을 추출하여 회원가입 또는 로그인 처리.
사전 준비 필요: Google Cloud Console 에서 iOS 와 Android 각각 OAuth Client ID 를 발급받고
백엔드 환경변수 GOOGLE_IOS_CLIENT_ID, GOOGLE_ANDROID_CLIENT_ID (또는 yml sns.google.mobile.*.client.id) 에 등록해야 합니다.
미발급/미설정 시 모든 idToken 이 AUDIENCE_MISMATCH 로 거부됩니다.
응답
성공 (200 OK)
{
"memberId": "108123456789012345678",
"accessToken": "eyJhbGciOiJIUzI1NiJ9...",
"refreshToken": "eyJhbGciOiJIUzI1NiJ9...",
"isFirstLogin": false
}Response 스키마 (TokenDto)
| 필드 | 타입 | 설명 |
|---|---|---|
memberId | string | Google 의 sub 값 (Member ID) |
accessToken | string | Glowb JWT access token |
refreshToken | string | Glowb JWT refresh token (Redis 의 {memberId}:app 키 저장) |
isFirstLogin | boolean | 신규 회원가입 여부 |
에러 응답
{
"status": 401,
"code": "OAUTH_003",
"message": "ID token 검증에 실패했습니다.",
"data": null
}| HTTP | code | 발생 조건 |
|---|---|---|
| 400 | OAUTH_001 | idToken 누락 또는 빈 문자열 |
| 400 | OAUTH_002 | device 누락 또는 WEB |
| 401 | OAUTH_003 | JWT 서명 실패 / aud 불일치 / iss 불일치 / exp 만료 (모두 같은 코드) |