Как использовать несколько значений JWK Set Uri в одном приложении Spring Boot? - PullRequest
2 голосов
/ 03 февраля 2020

У меня есть требование использовать два разных сервера авторизации (два экземпляра Okta) для проверки токенов аутентификации, исходящих от двух разных веб-приложений, в одном приложении Spring Boot, которое является внутренним уровнем REST API.

В настоящее время у меня есть один сервер ресурсов, работающий со следующей конфигурацией:

@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-server и spring-security-oauth2-jose в моем приложении Spring Boot (версия 2.2.4.RELEASE)

Конечное состояние, в которое я хочу попасть, в зависимости от настраиваемого HTTP-заголовка, заданного в запросе, я хочу выбрать, какой экземпляр Okta мое приложение Spring Boot использует для декодирования и проверки токена JWT.

В идеале в моем файле конфигурации должно быть два свойства:

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

Я должен иметь возможность использовать RequestHeaderRequestMatcher для сопоставления значения заголовка в конфигурации безопасности. Я не могу тренироваться, как использовать два разных экземпляра oauth2ResourceServer, которые соответствуют конфигурации безопасности.

1 Ответ

0 голосов
/ 05 мая 2020

С пружинной загрузкой это невозможно сделать прямо из коробки прямо сейчас. Spring Security 5.3 предоставляет функциональные возможности для этого (весенняя загрузка 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

Возможно выполнить настройку сервера ресурсов вручную для использования несколько поставщиков удостоверений, перейдя по ссылкам, которые я предоставил. Предоставленные ссылки в основном предназначены для разработки весенних загрузок webflux. Для веб-разработки с базовой загрузкой c, пожалуйста, смотрите это видео:

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

...