1️⃣ OAuth2LoginAuthenticationFilter

  • OAuth 2 인증을 처리하기 위한 Filter

2️⃣ CommonOAuth2Provider

  • 신뢰할 만한 OAuth 2 Provider 목록 제공
  • 실질적으로 각 Provider에게 넘겨줘야 되는 Client 정보를 포함한 ClientRegistration 객체를 생성한다.

3️⃣ ClientRegistration

  • 각 OAuth 2 Provider 사용을 위해 Client에게 필요한 등록 정보
public enum CommonOAuth2Provider {

	GOOGLE {

		@Override
		public Builder getBuilder(String registrationId) {
			ClientRegistration.Builder builder = getBuilder(registrationId,
					ClientAuthenticationMethod.CLIENT_SECRET_BASIC, DEFAULT_REDIRECT_URL);
      // Provider가 제공할 Resource 범위
			builder.scope("openid", "profile", "email");

      // Client가 OAuth 2 인증을 위해 Redirect하는 URI(구글의 로그인 인증 화면)
			builder.authorizationUri("<https://accounts.google.com/o/oauth2/v2/auth>");

      // Client가 Access Token과 Refresh Token을 얻기 위해 호출하는 URI
			builder.tokenUri("<https://www.googleapis.com/oauth2/v4/token>");

      // JWT 검증용 Key Set을 조회할 수 있는 URI
			builder.jwkSetUri("<https://www.googleapis.com/oauth2/v3/certs>");

      // Access Token 발행자 정보 조회 URI
			builder.issuerUri("<https://accounts.google.com>");

      // Resource Owner의 User Info를 조회하기 위한 URI
			builder.userInfoUri("<https://www.googleapis.com/oauth2/v3/userinfo>");

      // Resource Owner의 이름에 접근하기 위한 Attribute Name
			builder.userNameAttributeName(IdTokenClaimNames.SUB);

      // Client Name. Provider를 구분하는 용도로 사용
			builder.clientName("Google");
			return builder;
		}

	},
  
  ...
  ...

}

 

4️⃣ OAuth2AuthorizedClientService

  • OAuth 2로 인증된 Client(OAuth2AuthorizedClient)를 관리하는 서비스 클래스
  • OAuth2AuthorizedClientService 인터페이스의 구현 클래스
    • InMemoryOAuth2AuthorizedClientService
    • JdbcOAuth2AuthorizedClientService


5️⃣ ClientRegistrationRepository

  • OAuth 2로 인증된 Client(OAuth2AuthorizedClient)를 저장하는 역할을 한다.
    • ClientRegistrationRepository 인터페이스의 구현 클래스
      • InMemoryClientRegistrationRepository
  • OAuth2AuthorizedClientService가 ClientRegistrationRepository를 사용해 OAuth2AuthorizedClient 를 저장한다.



6️⃣ OAuth2AuthorizedClientManager

  • OAuth2AuthorizedClient 를 관리하는 관리자 역할을 한다.



7️⃣ OAuth2AuthorizedClientProvider

  • Authorization Grant 유형을 설정할 수 있는 인터페이스
    • Authorization Code
    • Implicit Grant Type
    • Client Credentials
    • Resource Owner Password Credentials

+ Recent posts

출처: http://large.tistory.com/23 [Large]