Spring

동일한 Spring Boot 앱에서 여러 'JWK Set Uri' 값을 어떻게 사용합니까?

기록만이살길 2022. 12. 18. 03:52
반응형

동일한 Spring Boot 앱에서 여러 'JWK Set Uri' 값을 어떻게 사용합니까?

1. 질문(문제점):

백엔드 REST API 레이어인 단일 Spring Boot 애플리케이션 내에서 두 개의 다른 웹 애플리케이션에서 오는 인증 토큰의 유효성을 검사하기 위해 두 개의 서로 다른 인증 서버(Okta 인스턴스 두 개)를 사용해야 한다는 요구 사항이 있습니다.

현재 다음 구성으로 작업하는 리소스 서버가 하나 있습니다.

@Configuration
@EnableWebSecurity
public class ResourceServerSecurityConfig extends WebSecurityConfigurerAdapter {

  @Override
  protected void configure(HttpSecurity http) throws Exception{
    http
      .authorizeRequests().antMatchers("/public/**").permitAll()
      .anyRequest().authenticated()
      .and()
      .oauth2ResourceServer().jwt();
  }
}
spring.security.oauth2.resourceserver.jwt.issuer-uri=https://dev-X.okta.com/oauth2/default
spring.security.oauth2.resourceserver.jwt.jwk-set-uri=https://dev-X.okta.com/oauth2/default/v1/keys

의존성 spring-security-oauth2-resource-serverspring-security-oauth2-jose내 Spring Boot 앱(버전 2.2.4.RELEASE)

내가 원하는 최종 상태는 요청에 설정된 사용자 지정 HTTP 헤더에 따라 Spring Boot 앱이 JWT 토큰을 디코딩하고 유효성을 검사하는 데 사용하는 Okta 인스턴스를 선택하려는 것입니다.

이상적으로는 구성 파일에 다음과 같은 두 가지 속성이 있습니다.

jwkSetUri.X=https://dev-X.okta.com/oauth2/default/v1/keys
jwtIssuerUri.X=https://dev-X.okta.com/oauth2/default

jwkSetUri.Y=https://dev-Y.okta.com/oauth2/default/v1/keys
jwtIssuerUri.Y=https://dev-Y.okta.com/oauth2/default

RequestHeaderRequestMatcherSecurity 구성에서 헤더 값을 일치 시키기 위해 a를 사용할 수 있어야 합니다. 내가 연습할 수 없는 것은 oauth2ResourceServerSecurity 구성과 함께 제공되는 두 가지 다른 인스턴스를 사용하는 방법입니다.

2. 해결방안:

스프링 부트를 사용하면 지금 바로 사용할 수 없습니다. Spring Security 5.3은 이를 수행하는 기능을 제공합니다(spring boot 2.2.6은 여전히 ​​spring security 5.3을 지원하지 않음). 다음 문제를 참조하십시오.

https://github.com/spring-projects/spring-security/issues/7857
https://github.com/spring-projects/spring-security/pull/7887

내가 제공한 링크를 따라 여러 ID Provider를 사용하도록 리소스 서버를 수동으로 구성할 수 있습니다. 제공되는 링크는 주로 스프링부트 웹플럭스 개발용입니다. 기본 스프링 부트 웹 개발에 대해서는 다음 비디오를 참조하십시오.

https://www.youtube.com/watch?v=ke13w8nab-k

반응형