В настоящее время я настраиваю один сервер ресурсов, который будет проверять токены доступа с различных серверов авторизации.
Безопасность Spring (с использованием также и стартера безопасности Okta) позволяет мне только устанавливатьURI одного эмитента.
Мне удалось найти решение, которое работает , но я не уверен, что это лучший метод / стандартный способ сделать это.В приведенном ниже фрагменте кода я явно настроил ресурсы с помощью Java Config от Spring для простоты.
@Bean
public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
http
.authorizeExchange()
.pathMatchers("/api/protected/by/authserver1")
.and()
.oauth2ResourceServer()
.jwt()
.jwtDecoder(ReactiveJwtDecoders.fromOidcIssuerLocation("https://authserver1")
.and()
.and()
.authorizeExchange()
.pathMatchers("/api/protected/by/authserver2")
.and()
.oauth2ResourceServer()
.jwt()
.jwtDecoder(ReactiveJwtDecoders.fromOidcIssuerLocation("https://authserver2");
return http.build()
}
Кажется, это работает точно так, как задумано, токены создаются из одного сервера аутентификации и используются на конечной точке для проверки другогополучить 401. Когда отчеканенные токены используются на их соответствующих конечных точках, они успешно проверяются.
Это выглядит немного забавно, когда .and()
перезванивает спина к спине, у меня сложилось впечатление, что эти цепочечные вызовыпросто создать несколько веб-фильтров под капотом?В любом случае, является ли это стандартным способом включения этой функции в приложении Spring с Spring Security и WebFlux?
Кроме того, я столкнулся с этим ТАКИМ вопросом, но я не знаю, что яВы сможете настроить «поставщика федерации» в контексте этого проекта.Однако, если этот подход - лучшая практика, я хотел бы знать.Тем не менее, я думаю, что в некоторой степени это происходит на уровне Okta с режимом посредника федерации в политиках доступа к серверу auth ...?