2022년 6월 1일 TIL

yshjft·2022년 6월 1일
0

데브코스 TIL

목록 보기
40/45

@AuthenticationPrincipal

  • 로그인한 사용자의 정보를 가져온다.
  • AuthenticationPrincipalArgumentResolver.resolveArgument()를 통해 Authentication(AuthenticationToken)의 principal을 가져온다.

순환 참조 허용

스프링 부트 2.6 부터는 순환 참조가 기본적으로 금지되어 있다. 따라서 이를 허용시키고 싶다면 application.properties 파일에 spring.main.allow-circular-references=true를 추가해야 한다.

OAuth2AuthorizationRequestRedirectFilter

로그인 요청이 들어오면 OAuth 서비스 제공 서버로 요청을 리다이렉트 시킨다.

OAuth2LoginAuthenticationFilter

  • Authorization Response(authorization code)를 수신하고, Token Request(authorization code를 access tokendm을 교환하는 요청)를 인증 서버로 요청한다.
  • AuthenticationManager, AuthenticationProvider 같은 Spring Security 기본 인프라 스트럭처가 그대로 활용한다.

JdbcOAuth2AuthroizedClientService

OAuth2.0 인증이 완료된 사용자 정보를 메모리(InMemoryOAuth2AuthorizedClientService)에 저장하고 있다. 이는 OAuth2.0 으로 인증되는 클라이언트가 많아질 경우 Out Of Memory Error를 발생시킬 수 있으므로 DB에 저장하도록(JdbcOAuth2AuthroizedClientService) 변경할 수 있다.

@Bean
public OAuth2AuthorizedClientService authorizedClientService(
  JdbcOperations jdbcOperations,
  ClientRegistrationRepository clientRegistrationRepository
) {
  return new JdbcOAuth2AuthorizedClientService(jdbcOperations, clientRegistrationRepository);
}

...

@Override
protected void configure(HttpSecurity http) throws Exception {
  http
    // ... 생략 ...
    .oauth2Login()
      .authorizedClientRepository(getApplicationContext().getBean(AuthenticatedPrincipalOAuth2AuthorizedClientRepository.class))
      .and()
  ;
}
profile
꾸준히 나아가자 🐢

0개의 댓글