Glowb Dev Docs
Main APIAI 토큰 API

POST /ai/auth/refreshToken/v2

신규 web/app 공용 Refresh Token 재발급 (device 키 분리 엄격)

Refresh Token v2

신규 web FE + 신규 RN 모바일 앱이 공용으로 사용하는 refresh token 재발급 엔드포인트.

기존 POST /ai/auth/refreshToken 과 달리 device 키 분리가 엄격합니다 — device 값에 따라 {userId}:web 또는 {userId}:app1종만 조회/저장하므로, 한쪽 device 의 refresh 가 다른 device 세션을 건드리지 않습니다.

기존 v1 (/auth/refreshToken, /ai/auth/refreshToken) 은 web/app/legacy 3종 키를 모두 조회하고 새 refresh 는 강제로 app 또는 web 키로 저장하는 모호한 동작이 있어 v2 를 분리 신설했습니다. 기존 엔드포인트는 그대로 유지되며 legacy 호환만 담당합니다.

항목
메서드POST
경로/ai/auth/refreshToken/v2
인증Refresh Token (Authorization header)

요청

POST /ai/auth/refreshToken/v2
Authorization: Bearer {refresh_token}
Content-Type: application/json

{
  "device": "APP"
}

요청 헤더

헤더필수설명
AuthorizationBearer {refresh_token} 형식

요청 바디

필드타입필수설명
devicestring"WEB" 또는 "APP". 발급 시 사용한 device 와 일치해야 함

검증 동작

  1. 서명 검증: refresh token JWT 의 서명만 검증 (만료는 무관 — Redis 가 실제 유효성 관리)
  2. userId 추출: 토큰 payload 에서 userId 추출
  3. Redis 조회: {userId}:{device.lowercase} 키에서 저장된 refresh token 조회
  4. 일치 확인: 저장된 token 과 요청 token 이 정확히 일치하는지 확인
  5. 재발급: 새 access + refresh token 발급, 같은 device 키에 저장

device 분리 엄격: APP 으로 발급된 refresh 는 device=WEB 으로 갱신할 수 없습니다. 반드시 발급받은 device 와 동일한 값을 전달해야 합니다.

응답

성공 (200 OK)

{
  "memberId": "1234567890",
  "accessToken": "eyJhbGciOiJIUzI1NiJ9...",
  "refreshToken": "eyJhbGciOiJIUzI1NiJ9...",
  "isFirstLogin": false
}

Response 스키마 (TokenDto)

필드타입설명
memberIdstring사용자 ID
accessTokenstring새로 발급된 Access Token
refreshTokenstring새로 발급된 Refresh Token (같은 device 키에 저장)
isFirstLoginboolean항상 false (refresh 흐름)

에러 응답

{
  "status": 401,
  "code": "OAUTH_003",
  "message": "ID token 검증에 실패했습니다.",
  "data": null
}
HTTPcode발생 조건프론트엔드 처리
400OAUTH_001refresh token 누락 또는 빈 문자열
400OAUTH_002device 누락 또는 잘못된 값
401OAUTH_003서명 검증 실패 또는 userId 추출 불가로그인 페이지로 이동
401OAUTH_007{userId}:{device} 키에 저장된 token 과 불일치 (세션 만료)"세션이 만료되었습니다" 후 로그인 페이지로 이동

중요: 401 에러 발생 시 반드시 로그아웃 처리. 무한 retry 방지.

v1 과의 차이

항목v1 (/ai/auth/refreshToken)v2 (/ai/auth/refreshToken/v2)
조회 키web, app, legacy 3종요청한 device 키 1종만
저장 키무조건 web요청한 device 키 그대로
관리자 Redis 우회있음 (Nest.js 호환)없음
device 분리약함엄격
body없음 (header 만){ "device": "WEB" 또는 "APP" }

API 테스트

On this page