Spring Cloud Gateway
版本:hoxton.sr3
spring boot
版本:2.2.5.发布
现在我想将安全性集成到我的网关和所有下游微服务中。最终,我决定使用Firebase作为身份提供商(IDP)。我的Angular应用程序将从Firebase获得JWT令牌,并在每个请求中发送到云网关。因此,网关将开始只充当资源服务器,仅此而已。
下面是我如何尝试的。设置和Spring Cloud Gateway
同时充当资源服务器。在这里很好地解释了Spring安全文档。
下面是我的配置
@EnableWebFluxSecurity
public class ResourceServerSecurityConfiguration {
@Bean
public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
// @formatter:off
http
.authorizeExchange()
.anyExchange().authenticated()
.and()
.oauth2ResourceServer()
.jwt();
return http.build();
// @formatter:on
}
}
和application.yml
spring:
security:
oauth2:
resourceserver:
jwt:
jwk-set-uri: https://www.googleapis.com/service_accounts/v1/jwk/securetoken@system.gserviceaccount.com
issuer-uri: https://securetoken.google.com/{$app.name}
正如您在这个YAML中看到的,我提供了jwk-set-uri和发行器来验证传入的令牌。
@Bean
@LoadBalanced
public WebClient.Builder loadBalancedWebClientBuilder() {
return WebClient.builder()
.filter(new ServletBearerExchangeFilterFunction());
}
正如您所看到的,它使用ServletBearerExchangeFilterFunction
,这是我真正的问题所在。
我已经检查了Spring在配置oauth2ResourceServer时使用NoopServerSecurityContextRepository
。据我目前所知,这是一个用来注册每个请求上下文的存储库。此外,我理解使用NoOp是有意义的,因为我们希望成为无状态的。然而,我不明白的是,如何使ServletBearerExchangeFilterFunction
正常工作并向下游传递我的令牌。
我现在花了很多时间试图找出正确的方法来做这件事。
即使根据这一点,我试图做的事情也应该是合法和可能的。不知道我哪里弄错了。
Spring Cloud Gateway旨在提供一种简单而有效的方法来路由到API,并为它们提供交叉关注点,如:安全性、监视/度量和弹性。
如果您将SCG(Spring Cloud Gateway)设置为oauth2资源服务器,您必须做更多的自定义操作,也许像这样。我认为你不应该那样做。
您可以使用网关作为路由,将访问令牌头发送给SCG,SCG将访问令牌带给oauth2资源服务器,并在oauth2资源服务器端检查权限。
Spring云网关令牌中继网关过滤器工厂说:
{githubmaster}/src/main/java/org/springframework/cloud/gateway/security/tokenrelaygatewayfilterfactory.java[filter]从当前通过身份验证的用户中提取访问令牌,并将其放在下游请求的请求头中。
这样可以在你的应用程序中保持oauth2的清晰度。
我一直在试图找到一个与eureka服务器集成的spring cloud gateway的运行示例,以及一些Hystrix示例,但到目前为止我还没有找到。有什么地方可以找到它吗?我真的很想看到spring cloud gateway投入使用,取代我目前的Zuul API服务。 谢谢!
我使用Spring创建微服务。我使用Eureka进行服务发现,使用Zuul进行路由。现在我想切换到Spring Cloud Gateway(因为它的非阻塞特性),但是我没有找到自动路由到每个Eureka服务的方法。 例如,如果一个服务'eureka-client'注册到了Eureka,那么Zuul本身就为这个服务提供了类似于localhost:8762/eureka-client的路径。使用Spr
问题内容: 我们已经设置了OAuth2授权服务器,因此我需要创建一个相应的资源服务器(单独的服务器)。我们计划使用Spring Security OAuth2项目。他们关于设置资源服务器的文档: https://github.com/spring-projects/spring-security- oauth/wiki/oAuth2#resource-server-configuration 应该
我们已经设置了一个OAuth2授权服务器,所以我需要创建一个相应的资源服务器(单独的服务器)。我们计划使用Spring Security OAuth2项目。他们关于设置资源服务器的文档: https://github.com/spring-projects/spring-security-oauth/wiki/oauth2#资源-服务器-配置 应该指向令牌处理bean。然而,令牌处理似乎是由服务器
试图让UserDetailsService为我设置的oauth2资源服务器工作。我能够成功地对jwt进行身份验证,但是我所做的一切似乎都无法让它调用loadUserByUsername方法。它最初使用的是SAML,并且可以工作,但现在我切换到了Oauth2,我无法让它工作。 我在google上发现,我只需要用@service将类注册为bean,spring就会把它捡起来,但它不起作用。我还尝试通过
我有一个带有一些endpoint的anexo API,比如: 如何将Spring Cloud Gateway与这些endpoint一起使用?