我的基础设施使用类似Spring Cloud Gateway的入口点。网关配置有密钥斗篷,以使用以下配置验证验证标头
spring:
security:
oauth2:
resource-server:
jwt:
jwk-set-uri: https://httpd.keycloak.local:443/keycloak/realms/myRealm/protocol/openid-connect/certs
以下是一个示例Route
spring:
cloud:
gateway:
routes:
- id: my-route
uri: http://service.local:8020
predicates:
- Path=/myPath/api/myRoute/test
filters:
- name: StripPrefix
args:
parts: 2
我如何在yml文件中定义这个路由public和另一个通过指向key斗篷的jwk-uri进行身份验证的路由?
我在spring云网关配置文档中没有看到任何关于安全规则的内容。
我相信你要么:
- 让所有流量通过网关并处理每个服务的安全性
- 编写一个web安全配置类并定义一个SecurityWebFilterChain bean
- 使用spring-addons webflux jwt资源服务器从属性定义
permitAll()
路由(其他需要用户身份验证的路由(
只有最后一个解决方案只能使用yaml文件配置:在pom中,用替换spring-boot-starter-oauth2-resource-server
<dependency>
<groupId>com.c4-soft.springaddons</groupId>
<artifactId>spring-addons-webflux-jwt-resource-server</artifactId>
<version>${com.c4-soft.springaddons.version}</version>
</dependency>
在yaml中,用替换spring.security.oauth2.resource-server
com.c4-soft.springaddons.security:
jwt-issuers:
- location: https://httpd.keycloak.local:443/keycloak/realms/myRealm
permit-all:
- /myPath/api/myRoute/test
- /public/**
注意,尝试访问";非公开的";没有有效授权的路由将导致401(未授权(而不是302(重定向到登录(。在我看来,客户端应该不确定对受保护路由的请求是用Authorization
头发出的,或者通过重定向到授权服务器并重试来处理未经授权的请求。
还要注意,spring-security-oauth2-webflux-addons
将自动配置,而不仅仅是允许所有路由(例如CORS、CSRF和权限映射(。
最后,我还没有在spring云网关上尝试过。请告诉我进展如何;-(