gpt4 book ai didi

spring-boot - 配置多个 OAuth2 授权服务器和单个资源服务器之间的通信

转载 作者:行者123 更新时间:2023-12-05 07:23:04 24 4
gpt4 key购买 nike

我目前正在设置一个资源服务器,它将验证来自各种授权服务器的访问 token 。

Spring security(也使用 Okta security starter)似乎只允许我设置一个发行者 URI。

我设法找到了一个有效的解决方案,但我不确定这是否是最佳实践/标准方法。在下面的代码片段中,为了简单起见,我已经使用 Spring 的 Java Config 明确设置了资源。

@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()
}

这似乎完全按预期工作, token 从一个身份验证服务器生成并用于端点验证另一个接收 401。当生成的 token 在各自的端点上使用时,它们被成功验证。

.and() 来回调用看起来有点滑稽,我的印象是这些链式调用只是在幕后创建多个 Web 过滤器?无论哪种方式,这是在具有 Spring Security 和 WebFlux 的 Spring 应用程序中启用此功能的标准方法吗?

另外,我遇​​到了this SO 问题,但我不知道我是否能够在此项目的上下文中设置“联合提供程序”。但是,如果这种方法是我想知道的最佳实践。但是,我认为在身份验证服务器访问策略上使用联合代理模式的 Okta 级别在某种程度上正在发生这种情况...?

最佳答案

Either way, is this the standard way of enabling this functionality in a Spring application with Spring Security and WebFlux?

没有。更重要的是,您提供的示例将不起作用。您可以调查 ServerHttpSecurity 实现并了解原因。实际上,当您调用 oauth2ResourceServer() 时,它会设置新的 OAuth2ResourceServerSpec 或返回可以修改的旧的。因此,在您的情况下,只会应用第二个 JwtDecoder,因为它会覆盖第一个。如果您想为每个路径配置 oauth2ResourceServer,您必须定义多个 SecurityWebFilterChain ,如此处发布的 https://stackoverflow.com/a/54792674/1646298 .

关于spring-boot - 配置多个 OAuth2 授权服务器和单个资源服务器之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56244598/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com