Spring - OAuth 2.0 Client 기초

Tadap·2023년 9월 11일
0

Spring Security

목록 보기
1/7

OAuth2.0 Login

어플리케이션 사용자를 OAuth2.0, OpenID Connect로 로그인 할 수 있는 기능 제공
소셜로그인을 구현해서 사용
AuthorizationCode 방식 사용

OAuth2.0 Client

위 Login과 비슷하나 AuthorizationCode 방식이 아닌 다른 방식 API 제공
ex) Client Credential, RefreshToken 등

클라이언트 권한 부여 요청

클라이언트 인가서버에게 권한부여, 토큰 요청을 할 때 클라이언트 정보 및 엔드포인트 정보가 필요하다.
이 정보는 application.yml에 클라이언트 설정과 엔드포인트 설정을 해야한다.
application.yml 에 있는 속성이 OAuth2ClientProperties의 각 속성에 바인딩 됩니다.
그리고 이 속성 값들은 인가서버로 권한부여 요청을 하기 위한 ClientRegistration 필드에 저장됩니다.

따라서 ClientRegistration을 참조해서 인가서버와 통신합니다.
순서: application yml -> OAuth2ClientProperties -> ClientRegistration

ClientRegistration에 저장된 정보를 OAuth2Client가 사용한다.
유명한 osp는 데이터를 적게 넣어도 되고 아니면 모든 정보를 다 기술해 주어야 한다.

  security:
    oauth2:
      client:
        registration:
          github:
            client-id:
            client-secret:
            redirect-uri:
            scope:
              - read
              - user
          google:
            client-id:
            client-secret:
            scope:
              - email
              - profile

위는 유명한 google, github이라서 이렇게만 적어줘도 되는거고
naver, kakao 같은 경우 registration 말고 provider 설정도 추가해 줘야 한다.

OAuth2ClientProperties

위 yml에서 등록한 정보들은 OAuth2ClientProperties 에 들어가 지는데 필드로
provider, registration을 가지고 있는다. 이 둘은 위 yml과 일치하고 이를 map으로 가진다.

ClientRegistrationRepository

ClientRegistrationRepository는 말 그대로 ClientRegistration의 저장소 역할을 해줍니다.
위에서 보면 ClientRegistration 을 만든다고 했는데 이 객체들을 여러가지 만들수 있고 이런 애들을 저장한다. 기본 구현체는 InMemoryClientRegistrationRepository이고 @Bean으로 등록되기 때문에 주입받아 사용 가능하다.
application.yml에서 설정 가능하고 다른 방법은 ClientRegistrationRepository를 가져와서 직접 Java코드로 등록하는 방법도 있다.

자동설정에 의한 초기화

1. OAuth2ImportSelector

조건식에 의해 참이면 그에 해당하는 설정 클래스를 가져온다. 가져온 클래스는 아래 2번이다.

2. OAuth2ClientConfiguration

해당 클래스 내부에는 3.클래스가 있고

3. OAuth2ClientWebMvcImportSelector

해당 클래스는 아래 4.클래스를 로드한다.
결국 위 1, 2, 3은 아래 4번을 호출하기 위한 과정으로 보면 편하다.

4. OAuth2ClientWebMvcSecurityConfiguration

  1. DefaultOAuth2AuthorizedClientManager
    는 실제 권한 부여 역할에 따라서 권한을 부여하는데 예로들어 clientRegistrationRepository가 있다.
  2. HandlerMethodArgumnetResolver
    도 권한 부여를 한다고 생각하면 된다.

OAuth2ClientWebMvcSecurityConfiguration이 클래스가 가장 중요한데 그 이유는 OAuth2AuthorizedClient를 관리하기 때문이다.
OAuth2AuthorizedClientaccessToken, refreshToken등 주요한 정보를 다 가지고 있다.

다음으로 자동설정이 하나 더 있는데 이는

OAuth2ClientAutoConfiguration

이다.
두가지가 있는데 위쪽에 적어둔 OAuth2ClientRegistrationRepositoryConfiguration이 있고 나머지는 OAuth2WebSecurityConfiguration이다.
OAuth2WebSecurityConfiguration
1. InMemoryOAuth2AuthorizedClientService로 Client를 조회, 저장, 삭제하고
2. AuthenticatedPrincipalOAuth2AuthorizedClientRepository로 위임하는 역할이있다.
3. 마지막은 SecurityFilterChain으로 체인으로 등록해서 사용 가능하게 한다

0개의 댓글