我有一个Sping Boot 后端设计为微服务Rest后端。我的User 2 Simple Modules使用spring-data-rest发布Rest接口。这个模块可以通过spring Cloud Gateway访问(使用Eureka 服务发现)前端是React。现在我想保护后端部分。在Gateway pom中我添加了:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.14</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
....
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
然后我编辑了gatewayserver.yml
security:
oauth2:
resourceserver:
jwt:
jwk-set-uri: http://127.0.0.1:8080/auth/realms/iaamrealm/protocol/openid-connect/certs
并将其添加到applikation类
@SpringBootApplication
@EnableEurekaClient
@EnableWebFluxSecurity
public class ApiGatewayserverServerApplication {
}
网关服务器使用配置文件gateway-as-resource-server
启动
在那之后,我测试了失眠症,没有承载令牌,我得到一个401未经授权,与承载我得到200确定和数据。
现在我有两个问题
1.如何配置授权可以hasAuthority("SCOPE_default-user-scope")
检查作用域是否存在或执行其他授权检查
1.如果一个后端服务调用另一个后端服务,我是否必须转发承载令牌手册(可能带有过滤器),或者是否有其他可能性?
我试着在Spring Cloud Docu Spring Doc和Google中找到更多信息,但没有结果。
1条答案
按热度按时间4urapxun1#
您正在查找的文档是Spring Security one:从安全性的Angular 来看,配置为资源服务器的
spring-cloud-gateway
只是一个普通的(React式)资源服务器。网关访问控制
在网关上编写访问控制时,不能使用方法安全性(
@PreAuthorize("hasAuthority("SCOPE_default-user-scope")")
等),必须在配置安全过滤器链时实现这些规则。请注意,如果您提供了一个安全过滤器链,它将取代自动配置的安全过滤器链。因此,它必须是一个完整的资源服务器安全过滤器链(仅提供
authorizeExchange
语句是不够的)。在网关上编写访问控制规则的其他限制包括
服务间调用
两种情况:
WebClient
有一些过滤器可以从安全上下文中检索访问令牌并为您设置授权头:ServletOAuth2AuthorizedClientExchangeFilterFunction
和ServerOAuth2AuthorizedClientExchangeFilterFunction
意见
我个人从不将网关配置为资源服务器: