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