ClientRegistration
OAuth 2.0 Client - ClientRegistration
OAuth 2.0또는OpenID Connect 1.0 Provider에서 클라이언트의 등록 정보를 나타낸다.ClientRegistration은
OpenID Connect 1.0 Provider의 설정 엔드포인트나 인가 서버의 메타데이터 엔드포인트를 찾아 초기화할 수 있다.


registrationId
ClientRegistration을 식별할 수 있는 유니크한 ID
clientId
클라이언트 식별자
clientSecret
클라이언트 secret
clientAuthenticationMethod
provider에서 클라이언트를 인증할 때 사용할 메서드로서basic,post,none(public 클라이언트)을 지원한다.authorizationGrantType
OAuth 2.0 인가 프레임워크는 네 가지 권한 부여 타입을 정의하고 있다.
지원하는 값은
authorization_code,implicit,client_credentials,password이다.redirectUri
클라이언트에 등록한 리다이렉트 URL로, 사용자의 인증으로 클라이언트에 접근 권한을 부여하고 나면 인가 서버가 이 URL로 최종 사용자의 브라우저를 리다이렉트 시킨다.
scopes
인가 요청 흐름에서 클라이언트가 요청한 openid, email, profile 등의 scope
authorizationUri
인가 서버의 인가 엔드포인트 URI
tokenUri
인가 서버의 토큰 엔드포인트 URI
(userInfoEndpoint) uri
인증된 최종 사용자의 클레임 / 속성에 접근할 때 사용하는
UserInfo엔드포인트 URI(userInfoEndpoint) authenticationMethod
UserInfo엔드포인트로 액세스 토큰을 전송할 때 사용할 인증 메서드
header,form,query를 지원한다.(userInfoEndpoint) userNameAttributeName
UserInfo응답에 있는 속성 이름으로, 최종 사용자의 이름이나 식별자에 접근할 때 사용한다.인가 서버마다 값이 다르다.
jwtSetUri
인가 서버에서 JSON 웹 키(
JWK) 셋을 가져올 때 사용할 URI.이 키 셋엔 ID 토큰의 JSON Web Signature(
JWS)를 검증할 때 사용할 암호키가 있으며,UserInfo응답을 검증할 때도 사용할 수 있다.configurationMetadata
OpenId Provider설정 정보로서application.yml에provider.issuerUri를 설정했을 때만 사용할 수 있다.
CommonOAuth2Provider

OAuth 2.0 공급자 정보를 제공하는 클래스로서 글로벌 서비스 제공자 일부는 기본으로 제공되어진다.
Client ID와Client Secret은 별도로application.yml에 작성해야 한다.Naver나 Kakao 같은 국내 공급자 정보는 위의 모든 항목을 수동으로 작성해서 사용해야 한다.
클라이언트 기준인
Registration항목과 서비스 제공자 기준인Provider항목으로 구분하여 설정한다.application.yml이 아닌 Java Config 방식으로도ClientRegistration등록을 설정할 수 있다.ClientRegistration 객체를 생성할 수 있는 빌더 클래스를 반환한다.
초기화 과정 디버깅

1. OAuth2ClientRegistrationRepositoryConfiguration
스프링은 기본적으로
ClientRegistrationRepository빈을InMemoryClientRegistrationRepository로 등록한다.외에
SupplierClientRegistrationRepository구현체가 하나 더 있다.
OAuth2ClientProperties는 직접application.yml파일에서 설정한 정보가 넘어온다.


2. OAuth2ClientPropertiesMapper
Registration정보를ClientRegistration으로 변환하는 과정을 수행한다.

여기서는 인가 서버와 통신하여 메타데이터를 얻는 과정을 수행한다.

3. ClientRegistrations
Oidc또는AUTH방식으로 메타데이터를 얻는다.

oidc(),oidcRfc8414(),oauth()는Supplier를 반환하여 순서대로 인가 서버와 통신하면서 정상 응답을 받으면 바로 해당 메타데이터를 반환하도록 되어 있다.




메타데이터를 얻는 데 성공하면
Builder를 이용해ClientRegistration을 생성해 반환한다.

이렇게 해서 최종적으로 만들어진
ClientRegistration을InMemoryClientRegistrationRepository에 저장하면서 빈으로 등록이 되게 된다.


참고로
application.yml설정 파일에서 registration 속성의client-id,client-secret,redirect-uri같은 필수값과 provider 속성의issuer-uri만 설정해도 모든 메타데이터를 가져올 수 있다.
만약
application.yml파일에서 설정한registrationId에 대한 메타데이터를 얻지 못하면CommonOAuth2Provider에서 얻는 과정을 수행한다.여기서는 이미 메타데이터가 정의되어 있기 때문에 직접 통신하는 과정이 생략된다.



이전 ↩️ - OAuth 2.0 Client - application.yml, OAuth2ClientProperties
Last updated