OAuth 2.0 Login <> OAuth 2.0 Client
OAuth2.0 login
- 애플리케이션 사용자를 외부 OAuth2.0 provider나 OpenId Connect 1.0 Provider 계정으로 로그인할 수 있는 기능을 제공한다.2
- OAuth2.0 인가 프레임워크의 권한 부여 유형 중 Authorization Code 방식을 사용합니다.
OAuth2.0 Client
- OAuth 2.0 인가 프레임워크에 정의된 클라이언 역활 지원
- 인가 서버의 권한 부여 유형에 따른 엔드포인트와 직접 통신할 수 있는 API를 제공
- Client Credentials
- Resource Owner Password Credentials
- Refresh Token
OAuth2Login - 소셜 로그인 ( 애플, 구글, 카카오 )
AuthorizationEndpoint에 대한 설명

.authorizationEndpoint(authorizationEndpointConfig -> {
authorizationEndpointConfig.baseUri("/api/oauth2/authorization");
authorizationEndpointConfig.authorizationRequestRepository(cookieAuthorizationRequestRepository());
})
- baseUri(“api/oauth2/authorization/{registrationId}”)
- AuthorizationServer ( 구글, 카카오, 애플, 키클록(내부))에 권한 부여 요청, 클라이언트정보, 엔드포인트 정보를 요청한다.
- 소셜로그인시 해당 로그인페이지로 이동
Authorization Code Flow 설명
- OAuth2AuthorizationRequestRedirectFilter
- 클라이언트는 사용자의 브라우저를 통해 인가서버의 권한 부여 엔드포인트로 리디렉션하여 권한 코드(Authorization Code - OAuth2 Flow) 부여를 흐름을 시작한다.
- DefaultOAuth2AuthorizationRequestResolver
- 웹 요청에서 OAuth2AuthorizationRequest 객체를 최종 완성한다.
/oauth2/authorization/{registartionId}
에서 registrationID와 일치하면 resgitstrationId를 추출하고 이를이용해서 OAuth2AuthorizationRequest를 빌드한다.
- 만약에 애플 로그인시, 지속적으로 시크릿키를 갱신없이 사용하려면 해당 부분을 커스텀해야한다.
- OAuth2AuthorizationRequestRepository
- 인가요청시작시 인가요청( redirect되서 authorization서버로부터 )을 받는시점까지 유지해야하기 때문에 해당 데이터를 세션에 기본적으로 저장한다.
- 기본적으로 세션 레포지토리에 authorizationRequest 관련된 정보들을 저장합니다.
- 인증서버(구글, 카카오, etc)등에서 리다이렉트 된 후 authorizationRequest 객체를 다시 참조하기 위함입니다.
- 현재 애플로그인시 쿠키 레포지토리를 사용하고 있습니다.
- 이유: 애플 로그인에서는 세션에 저장할때와 쿠키에 저장할때 둘이 값이 다릅니다.
RedirectionEndpoint에 대한 설명

.redirectionEndpoint(redirectionEndpointConfig -> {
redirectionEndpointConfig.baseUri("/api/login/oauth2/code/*");
})
.userInfoEndpoint(userInfoEndpointConfig -> {
userInfoEndpointConfig.userService(customOAuth2UserService);
});
- redirectionEndpointConfig.baseUri(“/api/login/oauth2/code/*”);
- Redirection을 받아오는 경로입니다. 인가코드를 파라메터로 달고 들어오게됩니다.