스프링 시큐리티 OAuth2/OAuth2LoginConfigurer 초기화 이해

API 커스텀 구현 -Authorization BaseUrl & Redirection BaseUrl

webmaster 2023. 1. 24. 11:49
728x90

Authorization BaseUrl

  • authorizationEndpoint().baseUrl(“/oauth2/v1/authorization”) 은 권한 부여 요청 BaseUri를 커스텀한다
  • 1단계 권한 부여 요청을 처리하는 OAuth2AuthorizationRequestRedirectFilter 에서 요청에 대한 매칭여부를 판단한다
  • 설정에서 변경한 값이 클라이언트의 링크 정보와 일치하도록 맞추어야 한다

Redirection BaseUrl

Redirection BaseUrl

  • redirectionEndpoint.baseUri("/login/v1/oauth2/code/*") 은 인가 응답의 baseUri를 커스텀한다
  • Token 요청을 처리하는 OAuth2LoginAuthenticationFilter 에서 요청에 대한 매칭여부를 판단한다
    • applicztion.yml 설정 파일에서 registration 속성의 redirectUri 설정에도 변경된 값을 적용해야 한다
    • 인가서버의 redirectUri 설정에도 변경된 값을 적용해야 한다
  • loginProcessingUrl("/login/v1/oauth2/code/*")를 설정해도 결과는 동일하지만 redirectionEndpoint.baseUri 가 더 우선이다

Test

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
  http.authorizeHttpRequests(authRequest -> authRequest.antMatchers("/login").permitAll()
      .anyRequest().authenticated());
  http.oauth2Login(oauth2 -> oauth2.loginPage("/login")
      .loginProcessingUrl("/login/oauth2/code/*") //둘다 사용할 수 있지만 우선순위가 redirectEndpoint 설정이 더 높기 떄문에 적용되지 않는다.
      .authorizationEndpoint(authorizationEndpointConfig ->
          //authorizationEndpointConfig.baseUri("/oauth2/authentication/**"))) //기본값
          authorizationEndpointConfig.baseUri("/oauth2/v1/authorization"))
      .redirectionEndpoint(redirectionEndpointConfig ->
          //redirectionEndpointConfig.baseUri("/login/oauth2/code/*")) //기본값
          redirectionEndpointConfig.baseUri("/login/v1/oauth2/code/*"))
  );
  return http.build();
}

인증서버의 redirection URL
application.yml 설정 변경

  • authorizationEndpoint 설정 같은 경우 기본값으로 "oauth2/authentication/{registrtionId}"가 기본값이다.
    •  해당 값을 변경하게 된다면, 인증 화면 또한 해당 URL로 변경이 된다.
  • redirectionEndpoint 같은 경우 기본값으로 "/login/v1/oauth2/code/*"이 기본값이다.
    • 해당 값을 변경하게 된다면, 인증 서버의 Valid redirect URI 도 변경하여야 하며, application.yml에 설정한 값 또한 변경해야 한다.
    • loginProcessingUrl 이랑 둘 다 설정할 수 있지만 우선순위는 redirectionEndPoint 가 높기 때문에, 둘 다 설정 시에는 redirectionEndPoint만 적용이 된다
728x90