oauth2Login() - OAuth 2.0 User 모델
UserInfo엔드포인트로 요청하는 과정을 보기 전에 OAuth 2.0 인증 과정에서 사용되는 User 모델에 대해 알아보자.
OAuth2UserService
액세스 토큰을 사용해서
UserInfo엔드포인트 요청으로 최종 사용자(리소스 소유자)의 속성을 가져오며OAuth2User타입의 객체를 리턴한다.구현체로 DefaultOAuth2UserService와 OidcUserService가 제공된다.

DefaultOAuth2UserService
표준 OAuth 2.0 Provider(인가 서버)를 지원하는
OAuth2UserService구현체다.OAuth2UserRequest에Access Token을 담아 인가 서버와 통신 후 사용자의 속성을 가지고 온다.최종
OAuth2User타입의 객체를 반환한다.

OidcUserService
OpenID Connect 1.0 Provider를 지원하는
OAuth2UserService구현체다.OidcUserRequest에 있는ID Token을 통해 인증 처리를 하며 필요시 DefaultOAuth2UserService를 사용해서UserInfo엔드포인트의 사용자 속성을 요청한다.최종
OidcUser타입의 객체를 반환한다.

DefaultOAuth2UserService는
OAuth2User타입의 객체를 반환한다.OAuth2UserService는
OidcUser타입의 객체를 반환한다.
OidcUserRequest의 승인된 토큰에 포함되어 있는 scope 값이accessibleScopes의 값들 중 하나 이상 포함되어 있을 경우UserInfo엔드 포인트를 요청할 수 있다.
흐름

OAuth2User & OidcUser
스프링 시큐리티는
UserAttributes및ID Token Claims를 집계, 구성하여 OAuth2User와 OidcUser 타입의 클래스를 제공한다.
OAuth2User

OAuth 2.0 Provider 에 연결된 사용자 주체를 나타낸다.
최종 사용자의 인증에 대한 정보인
Attributes를 포함하고 있다.(first name,middle name,address등으로 구성된다.)기본 구현체는 DefaultOAuth2User 이며 인증 이후
Authentication의principal속성에 저장된다.
OidcUser

OAuth2User를 상속한 인터페이스이며, OIDC Provider에 연결된 사용자 주체를 나타낸다.최종 사용자의 인증에 대한 정보인
Claims를 포함하고 있으며OidcIdToken및OidcUserInfo에서 집계 및 구성된다.기본 구현체는 DefaultOidcUser 이며
DefaultOAuth2User를 상속하고 있고, 인증 이후Authentication의principal속성에 저장된다.
OAuth 2.0 로그인을 통해 인증받은 최종 사용자의
Principal에는OAuth2User또는OidcUSer타입의 객체가 저장된다.권한 부여 요청 시
scope파라미터에openid를 포함했다면 OidcUser 타입의 객체가 생성되고, OidcUser는OidcUserInfo와IdToken을 가지고 있으며 최종 사용자에 대한Claims정보를 포함하고 있다.
OAuth2UseAuthority는 인가 서버로부터 수신한scope정보를 집계해서 권한 정보를 구성한다.OidcUser 객체를 생성할 때 ID 토큰이 필요한데 이때
JWT로 된 ID 토큰은 JSON Web Signature(JWS)로 서명이 되어 있기 때문에 반드시 정해진 알고리즘에 의한 검증이 성공하면 OidcUser 객체를 생성해야 한다.
흐름

Last updated

