[Auth] OAuth2 구글 로그인 + JWT 방식의 인증 플로우

2025. 12. 8. 20:00·Teck Stack/Spring

 

개요


OAuth2와 JWT로 인증을 구현 후, 복습하면서 OAuth2 + JWT 인증 플로우를 정리하게 되었습니다.

 

Google 인증 연동 과정 및 코드는 첨부하지 않고, 인증 플로우에 대해 정리하고자 합니다.

 

 

 

OAuth2 Code Grant 방식의 동작 순서


OAuth2의 Code Grant 방식은 다음과 같은 순서로 동작합니다.

 

1. 로그인 페이지로 이동

2. ID, Password로 로그인 요청

3. 로그인이 성공하면 설정한 redirect_url로 리다이렉트가 되며 쿼리 파라미터로 코드를 전달

4. 코드를 통해 인증 서버에 access 토큰 요청 (여기서 access_token은 Google API로 전송하기 위한 토큰)

5. access 토큰을 통해 유저 정보를 요청 및 획득

 

 

OAuth2 로그인 책임


OAuth2 로그인을 통해 사용자를 인증하고 ID 토큰을 획득하는 접근하기 위한 방식은 크게 두 가지가 있습니다.

 

첫 번째로 프런트단에서 인증 책임을 갖는 방법입니다.

프런트단에서 외부 인증 서버로 인증 요청을 보내고 처리합니다. 그 결과 획득한 유저 정보를 백엔드로 전달합니다.

백엔드에서는 전달받은 유저 정보를 확인하고, JWT를 발급합니다.

 

두 번째로 서버에서 인증 책임을 갖는 방법입니다.

프런트단에서 백엔드의 OAuth2 로그인 경로로 하이퍼링킹을 진행 후 백엔드단에서 로그인 페이지 요청, 코드 발급, access 토큰 발급, 유저 정보 획득을 처리합니다. 이후 JWT 토큰을 발행할 수 있습니다.

 

 

주의할 점

두 인증 방식은 모두 유효하지만, 프런트에서 인증 책임을 갖는 경우 서버로 전달받은 유저 정보의 진위 여부를 확인해야 합니다.

 

구글 공식 문서

 

실제로 구글 공식 문서에 따르면, 클라이언트 측 처리 방법을 구현하는 경우 토큰을 처리하고 사용하는데 보안 위험이 있으므로 추가적인 보안 로직 작성이 필요하다는 것을 확인할 수 있습니다.

 

따라서, 저는 백엔드에서 모든 인증 책임을 갖도록 코드를 구현했습니다.

 

 

OAuth2 인증 플로우


백엔드에서 인증 책임을 갖는 경우,  어떤 플로우로 구글 인증 서버와 통신이 이루어지는지 확인해 보겠습니다.

 

여기서 외부 인증 서버 및 외부 리소스 서버는 외부 소셜 로그인이 지원하는 서비스입니다.

인증 플로우
인증 플로우

 

1. 브라우저에서 소셜 로그인 버튼을 클릭합니다.

2. 서버에서는 구글 로그인 페이지로 리다이렉트 시킵니다.

3. 사용자의 ID, Password로 구글 로그인을 진행합니다.

4. 로그인 성공 시 승인 code가 쿼리 파라미터로 발급되고, 내 서버로 리다이렉트 되어 전달됩니다.

5. 승인 code로 구글 인증 서버에 access 토큰을 요청합니다.

6. 발급된 access 토큰으로 리소스 서버에서 유저의 정보를 획득합니다.

7. 성공적으로 유저의 정보를 획득하면, JWT를 쿠키에 담아 전달합니다.

 

 

JWT를 쿠키에 담는 이유


OAuth2 인증 시, 하이퍼링킹을 통해 구글 로그인 페이지로 이동하게 됩니다. 이후 로그인에 성공하면, 프런트의 특정 페이지로 리다이렉트 되게 됩니다.

 

이때 하이퍼링크로 이동한 페이지에서 리다이렉트를 통해 프런트 페이지로 이동하는 경우, 헤더로 값을 받을 수 없습니다.

 

기존 JWT 구조를 Access/Refresh로 설계하면, AccessToken은 헤더로 RefreshToken은 쿠키를 통해 발급받게 됩니다.

 

그렇다면, OAuth2 인증을 진행하게 되면 토큰을 어떻게 넘겨받을 수 있을까요?

 

해결 방법은 쿠키에 JWT를 담아서 가져온 뒤, 다시 백엔드로 접근하여 JWT 토큰을 헤더로 받아올 수 있습니다.

 

이와 관련된 자세한 내용은 다음 게시글에서 다루어 보도록 하겠습니다.

 

참고


스프링 OAuth2 클라이언트 JWT 1 : 소셜 로그인 실습 목표

OpenID Connect

OAuth 2.0을 사용하여 Google API에 액세스하기

반응형

'Teck Stack > Spring' 카테고리의 다른 글

[Auth] OAuth2 로그인 시 Access Token을 헤더에 담는 방법  (0) 2025.12.09
[Spring] @Scheduled 대신 Quartz를 사용한 스케줄링 구현  (0) 2025.10.14
[Spring] 외부 API 요청 시 상태 코드별 재시도 전략  (2) 2025.08.09
[Spring] MultipartFile + DTO 요청 받기 (feat : 415 에러 해결)  (0) 2025.06.30
'Teck Stack/Spring' 카테고리의 다른 글
  • [Auth] OAuth2 로그인 시 Access Token을 헤더에 담는 방법
  • [Spring] @Scheduled 대신 Quartz를 사용한 스케줄링 구현
  • [Spring] 외부 API 요청 시 상태 코드별 재시도 전략
  • [Spring] MultipartFile + DTO 요청 받기 (feat : 415 에러 해결)
taetae99
taetae99
우직하게 개발하기
    반응형
  • taetae99
    코드 대장간
    taetae99
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Teck Stack
        • Java
        • Spring
        • DB
        • Redis
        • SpringSecurity
        • Docker
        • HTML
        • AWS
      • 우아한테크코스
      • CS & Architecture
        • DDD
        • CS
        • 디자인 패턴
      • 트러블 슈팅
      • 알고리즘
        • 프로그래머스
        • 백준
      • 프로젝트
        • Board 프로젝트
      • 기타
      • 대회 및 후기
  • 인기 글

  • hELLO· Designed By정상우.v4.10.3
taetae99
[Auth] OAuth2 구글 로그인 + JWT 방식의 인증 플로우
상단으로

티스토리툴바