Spring/개인공부_실습

[Spring]OAuth2.0 간단한 동작 원리 및 모식도

빙응이 2024. 7. 30. 18:41

📝실습 목표

OAuth를 이용해 신뢰할 수 있는 외부 사이트로부터 인증을 받고 전달 받은 유저 데이터를
활용하여 세션을 만들고 인가를 진행해보자
(해당 방식은 코드 방식으로 진행할 것이다)

 

 

📝 OAuth 인증 동작 원리

1. 사용자의 로그인 요청

  • 사용자가 애플리케이션에서 로그인 버튼을 클릭합니다.
  • 이 요청은 애플리케이션의 로그인 페이지로 전송됩니다.

2. 리디렉션 필터가 로그인 요청을 처리

  • 스프링에서 로그인 요청을 받으면, 리디렉션 필터가 사용자에게 인증 서버(예: Google, Facebook 등)로 리디렉션을 수행합니다.

3. 로그인 성공 시 권한 코드 발급

  • 사용자가 인증 서버에서 로그인하고 권한을 승인하면, 인증 서버는 애플리케이션의 리디렉션 URI로 권한 코드를 포함하여 사용자를 리디렉션합니다.
  • 예를 들어, https://yourapp.com/callback?code=AUTHORIZATION_CODE와 같은 URL로 리디렉션됩니다.

4. 권한 코드로 액세스 토큰 발급 요청

  • 애플리케이션은 리디렉션 URI에서 받은 권한 코드를 사용하여 인증 서버의 토큰 엔드포인트로 액세스 토큰을 요청합니다.
  • 이 요청에는 클라이언트 ID, 클라이언트 비밀 키, 권한 코드, 리디렉션 URI가 포함됩니다.

5. 액세스 토큰으로 리소스 서버에서 사용자 정보 요청

  • 애플리케이션은 받은 액세스 토큰을 사용하여 리소스 서버에 사용자 정보를 요청합니다.
  • 액세스 토큰은 보통 Authorization 헤더에 포함되어 전송됩니다.

 

 

📝 동작 모식도

📌 각각의 필터가 동작하는 주소(관습)

  • OAuth2AuthorizationRequestRedirectFilte
/oauth2/authorization/서비스명

/oauth2/authorization/naver
/oauth2/authorization/google
  • OAuth2LoginAuthenticationFilter : 외부 인증 서버에 설정할 리다이렉트 Uri
/login/oauth2/code/서비스명

/login/oauth2/code/naver
/login/oauth2/code/google

 

📌 OAuth2 인증 및 동작을 위한 변수들

OAuth는 변수 설정만 진행하면 
OAuth2AuthorizationRequestRedirectFilter → OAuth2LoginAuthenticationFilter → OAuth2LoginAuthenticationProvider 까지의 과정을 추가 설정하지 않아도 자동으로 진행한다.

 

따라서 사용자는 UserDetailsService와 UserDetails만 구현하면 된다.

 

 

즉 우리가 구현해야 할 부분은

  • OAuth2UserDetailsService
  • OAuth2UserDetails

 

🧷참고

아래는 OAuth2AuthorizationRequestRedirectFilter → OAuth2LoginAuthenticationFilter → OAuth2LoginAuthenticationProvider 의 공식문서이다.

OAuth2AuthorizationRequestRedirectFilter (spring-security-docs 6.3.1 API)

 

OAuth2AuthorizationRequestRedirectFilter (spring-security-docs 6.3.1 API)

public class OAuth2AuthorizationRequestRedirectFilter extends org.springframework.web.filter.OncePerRequestFilter This Filter initiates the authorization code grant flow by redirecting the End-User's user-agent to the Authorization Server's Authorization E

docs.spring.io

OAuth2LoginAuthenticationFilter (spring-security-docs 6.3.1 API)

 

OAuth2LoginAuthenticationFilter (spring-security-docs 6.3.1 API)

Constructs an OAuth2LoginAuthenticationFilter using the provided parameters. Constructs an OAuth2LoginAuthenticationFilter using the provided parameters. Constructs an OAuth2LoginAuthenticationFilter using the provided parameters.

docs.spring.io

OAuth2LoginAuthenticationProvider (spring-security-docs 6.3.1 API)

 

OAuth2LoginAuthenticationProvider (spring-security-docs 6.3.1 API)

An implementation of an AuthenticationProvider for OAuth 2.0 Login, which leverages the OAuth 2.0 Authorization Code Grant Flow. This AuthenticationProvider is responsible for authenticating an Authorization Code credential with the Authorization Server's

docs.spring.io

 

 

 

 

개발자 유미 - YouTube

 

개발자 유미

백엔드 개발자 유미 - 실습 위주 진행 (개념적인 부분은 공식 Docs 참조 및 개인 학습 바랍니다!) - 간혹 댓글 알림이 안오는 경우가 있습니다.

www.youtube.com