728x90
OAuth2LoginAuthenticationFilter

- 인가서버로부터 리다이렉트 되면서 전달된 code를 인가서버의 Access Token으로 교환하고 Access Token 이 저장된 OAuth2LoginAuthenticationToken을 AuthenticationManager에 위임하여 UserInfo 정보를 요청해서 최종 사용자에 로그인한다.
- OAuth2AuthorizedClientRepository를 사용하여 OAuth2AuthorizedClient 를 저장한다.
- 인증에 성공하면 OAuth2AuthenticationToken 이 생성되고 SecurityContext에 저장되어 인증 처리를 완료한다
-
요청 매핑 Url : RequestMatcher : /login/oauth2/code/*
OAuth2LoginAuthenticationProvider

- 인가서버로부터 리다이렉트 된 이후 프로세스를 처리하며 Access Token으로 교환하고 이 토큰을 사용하여 UserInfo 처리를 담당한다
- Scope에 openid 가 포함되어 있으면(OICD 프로토콜로 인증을 받겠다 의미) OidcAuthorizationCodeAuthenticationProvider를 호출하고 아니면 OAuth2AuthorizationCodeAuthenticationProvider 를 호출하도록 제어한다
OAuth2AuthorizationCodeAuthenticationProvider(일반 인가 서버에서 사용하는 Provider)

- 권한 코드 부여 흐름을 처리하는 AuthenticationProvider
- 인가서버에 Authorization Code와 AccessToken의 교환을 담당하는 클래스
OidcAuthorizationCodeAuthenticationProvider(OICD 프로토콜로 인증을 받는 Provider)

- OpenID Connect Core 1.0 권한 코드 부여 흐름을 처리하는 AuthenticationProvider이며 요청 Scope에 openid 가 존재할 경우 실행된다
DefaultAuthorizationCodeTokenResponseClient

- 인가서버의 token 엔드 포인트로 통신을 담당하며 AccessToken을 받은 후 OAuth2AccessTokenResponse 에 저장하고 반환한다
- 내부적으로 RestTemplate를 가지고 있어 네트워크 통신을 해서 AccessToken을 가지고 온다.
구조

- provider 같은 경우 2가지 가 존재한다(OAuth2AuthorizationCodeAuthenticationProvider, OidcAuthorizationCodeAuthenticationProvider)
- OpenID Connection을 통해 인증을 하냐 하지 않느냐에 따라 크게 2가지로 분류되는 것을 알 수 있다.
Access Token 요청 과정

- 1단계에서 code를 발급받고, 이후의 과정부터 설명한다.
- OAuth2LoginAuthenticationFilter에서 login/oauth2/code/*로 들어오는 정보를 받기 때문에 리다이렉트가 되면 해당 필터를 타게 된다.
- HttpSessionOAuth2AuthorizationRequestRepository 에서 세션에 저장된 OAuth2AuthorizationRequest 정보를 가지고 와, OAuth2AuthorizationResponse(1단계 이후 가지고 온 정보)를 OAuth2AuthorizationExchange 클레스에 저장한다.
- OAuth2AuthorizationExchange에 저장된 값을 OAuth2LoginAuthenticationToken 으로 가지고 와, ProviderManager로 전달한다.
- ProviderManager는 OAuth2LoginAuthenticationProvider를 찾아 토큰을 전달하고, (OAuth2AuthorizationCodeAuthenticationProvider/ OidcAuthorizationCodeAuthenticationProvider)에 전달한다
- 현재는 OAuth2AuthorizationCodeAuthenticationProvider 기준으로 설명하겠다.
- DefaultAuthorizationCodeTokenResponseClient에 전달하여 RestTemplate를 통해 얻은 값을 OAuth2AuthorizationCodeAuthenticationToken에 담는다.
- DefaultOAuth2UserService에서 OAuth2UserRequest정보를 저장하고, 나중에 인가 서버의 UserInfo 엔드포인트로 전송할 파라미터를 저장한다.
RequestEntity<OAuth2AuthorizationRequest> - 통신 전

- 토큰 엔드포인트
- 클라이언트 인증을 위한 파라미터로 ClientAuthenticationMethod 는 Basic 이며 Base64(Client ID : Client Secret ) 으로 인코딩되어 있다
- access token 과 교환하기 위한 파라미터이다
ResponseEntity<OAuth2AccessTokenResponse> - 통신 후

728x90
'스프링 시큐리티 OAuth2 > OAuth2LoginConfigurer 초기화 이해' 카테고리의 다른 글
| OAuth2 로그인 구현 - UserInfo 엔드포인트 요청하기 (0) | 2023.01.22 |
|---|---|
| OAuth2 로그인 구현 - Oauth 2.0 User 모델 소개 (0) | 2023.01.17 |
| OAuth2 로그인 구현 - Authorization Code 요청하기 (0) | 2023.01.17 |
| OAuth2 로그인 구현 - OAuth 2.0 Login Page 생성 (0) | 2023.01.16 |
| OAuth2LoginConfigurer 초기화 이해 (0) | 2023.01.16 |