WEB/Security

OAuth 2.0 Client Fundamentals

Tony Lim 2022. 11. 18. 15:38
728x90

클라이언트 권한 부여 요청 시퀀스

1. client가 auth server로 권한 부여 요청을 하거나 token요청을 할 경우에 client 정보 및 endpoint 정보를 참조해서 전달.
2. application.yml 설정파일에 client 설정 auth server endpoint 설정을 한다.
3. 초기화가 진행되면 application.yml 에 있는 client및 endpoint 정보가 OAuth2ClientProperties의  각 속성에 바인딩 된다.
4. OAuth2ClientProperties 에 바인딩되어 있는 속성값은 auth server로 권한 부여 요청을 하기위한 ClientRegsitration 클래스필드에 저장.
5. OAuth2Client 는 ClientRegistration 를 참조해서 권한부여 요청을 위한 매개변수를 구성하고 auth server와 통신한다.

Registeration = Auth sevrer에등록될 client 정보
Provider = Auth server의 endpoint등 관련 메타정보 
둘다 여러개가 매핑이 될 수 있다. 

provider 의 user-name-attribute은 provider마다 다르다.


ClientRegistration 이해 및 활용

ClientRegistration은 Open ID Connect Provider 의 설정 엔드포인트나 인가 서버의 메타 데이터 엔드포인트를 찾아 초기화 할 수 있다.

권한부여 요청시 사용되는 클래스이다. Provider ,Client 정보를 다 들고 있기 때문이다. 

 

CommonOAuth2Provider 라는 클래스에 글로벌한 기업들이 제공하는 Auth server의 meta data를 미리 다 써놨다. 
Naver , Kakao 의 경우는 없으므로 수동으로 위 사진들 처럼 작성을 해줘야한다.

 

application properties에 적혀있는 메타데이터를 가져오는 과정이다. 

issuer-uri 에 적혀있는 정보를 기반으로 spring boot가 auth server의 메타데이터를 가져온다.
2가지 방식으로 가져온다. OpenIDConnection , Oauth 방식 은 서로 uri가 다름 , 결과는 둘다 같다. 
위 예시는 openIDConnection(OIDC)를 통해서 가져오는 방식이다.

application properties에 설정을 해놓으면 위에서 초기화 한 과정을 덮어 씌운다.


ClientRegistrationRepository 이해 및 활용

ClientRegistration 의 저장소 역할을 한다. 여러개가 저장될수있으니까
issuer-url 을 통해서 1차적으로 얻어온 ClientRegistration 메타데이터 정보를 저장하여 검색할 수 있는 기능을 제공한다.
Bean으로 등록되기에 다른곳에서 원하면 주입해서 사용할 수 있다.

이런식으로 application.yml 을 사용하지않고 java 프로그래밍(Java Config방식)으로 등록이 가능하다. 


자동설정에 의한 초기화 과정 이해

OAuth2ClientWebMvcSecurityConfiguration 안에 DefaultOAuth2AuthorizedClientManager는 권한부여 요청에 흐름안에서 추가적인 작업을 담당하게 해주는 클래스들을 가지고 있다.

스프링부트가 실행되면서 OAuth2ClientAutoConfiguration 클래스를 실행시킨다.
Client, proivder 정보를 가지고 있는 repo를 만들고 기본적인 SecurityFilterChain을 만들어준다. 

OAuth2AuthoizedClient = 승인이 끝난 사용자 정보들이 들어있는 클래스이다.

public class OAuth2AuthorizedClient implements Serializable {
   private static final long serialVersionUID = SpringSecurityCoreVersion.SERIAL_VERSION_UID;
   private final ClientRegistration clientRegistration;
   private final String principalName;
   private final OAuth2AccessToken accessToken;
   private final OAuth2RefreshToken refreshToken;

이 클래스를 매니지 하는곳이 OAuth2AuthorizedClientService 이다. 

 

 

 

 

https://www.inflearn.com/course/%EC%A0%95%EC%88%98%EC%9B%90-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%8B%9C%ED%81%90%EB%A6%AC%ED%8B%B0/unit/123472?tab=curriculum 

 

학습 페이지

 

www.inflearn.com

 

728x90

'WEB > Security' 카테고리의 다른 글

OAuth2.0 Client - oauth2Login() + API 커스텀 구현  (0) 2022.11.23
OAuth 2.0 Client - oauth2Login()  (1) 2022.11.22
OAuth 2.0 Open ID Connect + OAuth2.0 Client  (0) 2022.11.18
OAuth 2.0 권한부여 유형  (0) 2022.11.17
OAuth 2.0 용어 이해  (0) 2022.11.16