728x90
DefaultOAuth2UserService
- public OAuth2User loadUser(OAuth2UserRequest userRequest)
OAuth2UserRequestEntityConverter

- OAuth2UserRequest 를 RequestEntity 로 컨버터 한다
RestOperations
- RequestEntity 로 인가서버에 요청하고 ResponseEntity 로 응답받는다
- OAuth2User 타입의 객체를 반환한다
흐름

- 인가 서버에게 /userinfo 엔드 포인트로 요청을 하고, 이때 사용되는 서비스가 DefaultOAuth2UserService이다.
- 인가 서버가 응답으로 ResponseEntity에 값을 가지고 변환작업(ResponseEntity -> DefaultOAuth2User)을 한다.
- DefaultOAuth2User를 OAuth2LoginAuthenticationToken에 담아준뒤, 이를 전역으로 참조 가능하도록 SecurityContext에 저장한다.
- OAuth2AUthorizedClient 같은 경우 인가 서버로부터 권한이 부여된 클라이언트 객체로 클라이언트를 엑세스 토큰에 연결하는 객체이다.
OidcUserService

- public OidcUser loadUser(OidcUserRequest userRequest)
-
내부에 DefaultOAuth2UserService 를 가지고 있으며 OIDC 사양에 부합(Scope가 oidc에 부합)할 경우 OidcUserRequest 를 넘겨 주어 인가서버와 통신한다
-
OidcUser 타입의 객체를 반환한다
- 요청 Uri : POST /userinfo
흐름

- 인가 서버로 부터, 토큰을 받고 인증을 진행
- OidcAuthrizationCodeAuthenticationProvider가 Scope에 openid가 존재하면, OpenIdConnect 로 인증 요청을 한다.
- 응답 정보가 OAuth2AccessTokenResponse에 담기게 된다.
- 이떄, OIDC 방식일 경우 additionalParameters를 추가적으로 받게된다(idToken)
- 이 idToken 같은 경우는 이미 서명이 된 토큰으로 검증이 필요하다.
- JwtDecoder를 통해 검증을 하고, 인증이 성공하면 JWT 객체를 생성하고, OidcToken을 생성한다.
- OidcUserService가 accessToken에 포함된 Scope중에 OIDC 사양에 부합하는 Scope가 있는지 확인한다
- PROFILE, EMAIL, ADDRESS, PHONE

- post /userinfo를 통해 인증서버와 통신하고, 응답을 받은뒤, DefaultOAuth2User로 변환한다.
- OidcUserInfo -> DefaultOidcUser로 변환하고, 이를 OAuth2AuthenticationToken에 담아 SecurityContext에 담아준다.
- 전역으로 참조 가능하도록 한다.
728x90
'스프링 시큐리티 OAuth2 > OAuth2LoginConfigurer 초기화 이해' 카테고리의 다른 글
| OAuth2 로그인 구현 - Spring MVC 인증 객체 참조하기 (0) | 2023.01.24 |
|---|---|
| OAuth2 로그인 구현 - OpenID Connect 로그아웃 (0) | 2023.01.23 |
| OAuth2 로그인 구현 - Oauth 2.0 User 모델 소개 (0) | 2023.01.17 |
| OAuth2 로그인 구현 - Access Token 교환하기 (0) | 2023.01.17 |
| OAuth2 로그인 구현 - Authorization Code 요청하기 (0) | 2023.01.17 |