OAuth 인증 후 모바일 앱에서 안전하게 사용자 식별 정보를 받아 JWT로 최종 로그인 처리
- OAuth 인증이 끝나면 백엔드가 임시 토큰(UUID)을 발급해 Redis에 저장
- 앱은 딥링크를 통해 임시 토큰만 전달받아, 민감한 인증 코드를 직접 다루지 않음
- 임시 토큰을 검증한 뒤에야 실제 JWT Access/Refresh 토큰을 발급
redirect_uri
(백엔드)로 인가 코드(code
) 전달 /oauth/{provider}/callback?code={authorization_code}
호출 OAuthCallbackService
에서 추상화 code
로 OAuth 서버에 토큰 교환(Access/Refresh 토큰 발급) tempToken
) 생성 key = temp_token:{UUID}
value = memberSeq
TTL = 5분
response.sendRedirect("{딥링크}?temp_token={UUID}")
// 요청 예시
{
"tempToken": "{UUID}",
"deviceId": "디바이스식별자"
}
getAndDelete("temp_token:{UUID}")
호출 memberSeq
획득, 없으면 에러(만료 또는 중복 사용) JwtTokenProvider.createTokens(memberSeq)
로 Access/Refresh JWT 생성 key = refresh:{memberSeq}:{deviceId}
value = refreshToken
TTL = (config에 설정된 기간)
OAuth 콜백 단계에서 JWT와 회원정보를 바로 내려주지 않고, 임시 토큰(temp token) 만 발급해 앱에서 다시 호출하도록 만든 이유
deviceId
를 HTTPS POST로 전송 → 최종 JWT 발급 memberSeq + deviceId
조합으로 Redis에 저장하여 특정 기기에서만 유효 deviceId
가 없으므로 deviceId
로 로그인 요청 → “이 기기만 유효한 Refresh Token” 생성