Spring OAuth2Login - UserInfo 엔드포인트 요청

Tadap·2023년 9월 12일
0

Spring Security

목록 보기
4/7

OAuth2.0 주요 클래스

  1. DefaultOAuth2UserService
    loadUser() 를 이용하여 OAuth2User객체를 생성한다.
  2. OAuth2UserRequestEntityConverter
    OAuth2UserRequestRequestEntity로 바꾼다.
  3. RestOperations
    RequestEntity로 인가서버에 요청하고 이걸 ResponseEntity로 응답받아 OAuth2User객체로 반환한다.

요청 Uri는 /userinfo이다.

flow

  1. DefaultOAuth2UserService 에서 UserInfo 요청하면
  2. RequestEntity가 요청을 보내고
  3. RestTemplate을 통해 요청을 보내고 받으면 ResponseEntity가 오고 이걸 변환하여
  4. DefaultOAuth2User 객체로 만들고 이걸
  5. OAuth2LoginAuthneticationToken에 담는다.
  6. 이걸 SecurityContext에 저장하기 위해 OAuth2AuthenticationToken을 생성하고 저장한다.

그리고 이 과정에서 OAuth2AuthorizedClient를 만들어 accessToken, refreshToken등을 저장하며 이걸 AuthenticatedPrincipalOAuth2AuthorizedClientRepository에 저장하고 이걸 사용할 수 있게 해두었다.

따라서 SecurityContext에 저장된 OAuth2AuthenticationTokenOAuth2AuthorizedClient 두개의 정보를 이용해서 서블릿 환경에서 사용 가능하다.

OIDC 주요 클래스

  1. OidcUserService에서 똑같이 loadUser()가 있다. 전에 설명한대로 DefaultOAuth2UserService를 가지고 있어서 필요시 통신을 해 정보를 가져온다.
    리턴타입은 OidcUser 타입 객체이다

요청 Uri는 위와 같이 /userinfo이다

flow

위와 비슷하나 Oidc를 사용한다.
1. 따라서 OidcAuthorizationCodeAuthenticationProvider가 scope를 확인하고 OIDC이면 OIDC 요청을 보낸다.
2. 받은 정보를 JwtDecoder가 검증, 해석하여 OidcIdToken을 생성하고 이걸 OidcUserRequest로 바꿔 OidcUserService에 넘긴다
3. OidcUserService에서는 OIDC사양에 부합하는 Scope가 있으면 추가적인 정보를 받아서 인증을 시행하고. 아니면 OIDC 정보를 활용하여 인증을 진행한다.(RequestEntity사용)

0개의 댓글