Spring Security OAuth2 로그인 흐름 정리

말하는 감자·2025년 4월 28일

내일배움캠프

목록 보기
49/73
post-thumbnail

1. OAuth와 소셜 로그인 차이

  • OAuth는 인증(Authorization)을 위한 프로토콜임.
  • OAuth를 이용해서 Provider(구글, 카카오 등) 에게 권한을 위임받아 필요한 리소스(정보)를 접근하는 것 자체를 의미함.
  • 소셜 로그인은 OAuth를 활용해 사용자 정보를 조회하고 로그인 처리하는 것을 의미함.

2. Spring Boot가 OAuth Provider에 대한 Client가 됨

  • OAuth Provider는

    • Authorization Server (권한 부여)
    • Resource Server (리소스 제공) 역할을 함.
  • 흐름:

    1. 스프링 부트가 Authorization Server에 Authorization Code를 요청함.
    2. Authorization Server가 Authorization Code를 발급해줌.
    3. 스프링 부트가 Authorization Code를 이용해 AccessToken을 요청함.
    4. Authorization Server가 AccessToken을 발급해줌.
    5. 스프링 부트가 AccessToken으로 Resource Server에서 사용자 정보를 조회함.

3. AccessToken 주의사항

  • OAuth Provider가 발급하는 AccessToken은 Resource Server 접근용임.
  • 우리가 서버 내에서 발급하는 JWT 토큰과는 다름.
  • AccessToken은
    • 바로 폐기할 수도 있고,
    • Resource Server에 추가 접근이 필요한 경우 일시적으로 보관할 수도 있음.

4. Spring Security OAuth2 Client 흐름

업로드중..

4-1. 로그인 요청 시

  • 사용자가 로그인 페이지 요청 →
    OAuthAuthorizationRequestRedirectFilterProvider 로그인 페이지로 리다이렉트함.

4-2. 로그인 완료 후 (Authorization Code 수신)

  • OAuth2LoginAuthenticationFilter가 Authorization Code를 받아서 인증 흐름을 시작함.

4-3. 인증 상세 흐름

  • AuthenticationManager가 인증 처리 담당.
  • OAuth2LoginAuthenticationProvider가 소셜 로그인 전체 비즈니스 로직을 담당.
    • 내부적으로
      • OAuth2AuthorizationCodeAuthenticationProvider가 AccessToken 발급 요청.
      • OAuth2UserService가 AccessToken을 이용해 사용자 정보를 조회.
        • (여기서 CustomOAuth2UserService를 커스터마이징해야 함)

4-4. 인증 성공 후

  • AuthenticationSuccessHandler로 이동하여
    • 리다이렉션
    • JWT 발급
    • 추가 회원가입 처리 등 후처리를 진행함.
    • (이 부분도 커스터마이징 가능함)

5. 주요 개념

  • OAuth2UserRequest
    AccessToken을 포함한 사용자 요청 정보 객체.

  • OAuth2User
    Provider로부터 받아온 사용자 정보를 담는 객체.

  • CustomOAuth2UserService
    사용자 조회 이후,

    • 신규 회원가입 처리,
    • 기존 회원 로그인,
    • 추가 토큰 발급 등을 처리하기 위해 재정의하는 서비스.
profile
대충 데굴데굴 굴러가는 개발?자

0개의 댓글