Spring 云网关 Oauth2 资源服务器允许执行器端点
Spring Cloud Gateway Oauth2 Resource Server allow actuator endpoints
我有一个 Spring 云网关 运行 这个依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
并在 main 方法中使用此注释:
@EnableWebFluxSecurity
在我的属性文件中我有这些属性:
spring.security.oauth2.resourceserver.jwt.issuer-uri=http://keycloak/realms/dpse-realm
spring.security.oauth2.resourceserver.jwt.jwk-set-uri=http://keycloak/realms/dpse-realm/protocol/openid-connect/certs
当我在上面执行此操作时,每个转到网关的调用都需要具有由 keycloak 服务器颁发的有效 JWT 令牌。
我的问题是调用执行器端点时如何避免安全问题。
此时健康检查需要token。
我试图找到一个 属性 或其他方法而不是创建 @Bean 或 @Configuration class。
但是,至少,我的特定问题的正确答案是:
@EnableWebFluxSecurity
public class SecurityConfiguration {
private final WebEndpointProperties webEndpointProperties;
public SecurityConfiguration(
WebEndpointProperties webEndpointProperties) {
this.webEndpointProperties = webEndpointProperties;
}
@Bean
public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
http.csrf()
.disable()
.authorizeExchange()
.pathMatchers(webEndpointProperties.getBasePath() + "/health/**",
"/" + webEndpointProperties.getBasePath() + "/info/**")
.permitAll()
.and()
.authorizeExchange()
.anyExchange()
.authenticated()
.and()
.oauth2ResourceServer()
.jwt();
return http.build();
}
}
现在允许执行器端点被允许,其他调用必须使用令牌进行身份验证。
我有一个 Spring 云网关 运行 这个依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
并在 main 方法中使用此注释:
@EnableWebFluxSecurity
在我的属性文件中我有这些属性:
spring.security.oauth2.resourceserver.jwt.issuer-uri=http://keycloak/realms/dpse-realm
spring.security.oauth2.resourceserver.jwt.jwk-set-uri=http://keycloak/realms/dpse-realm/protocol/openid-connect/certs
当我在上面执行此操作时,每个转到网关的调用都需要具有由 keycloak 服务器颁发的有效 JWT 令牌。
我的问题是调用执行器端点时如何避免安全问题。
此时健康检查需要token。
我试图找到一个 属性 或其他方法而不是创建 @Bean 或 @Configuration class。
但是,至少,我的特定问题的正确答案是:
@EnableWebFluxSecurity
public class SecurityConfiguration {
private final WebEndpointProperties webEndpointProperties;
public SecurityConfiguration(
WebEndpointProperties webEndpointProperties) {
this.webEndpointProperties = webEndpointProperties;
}
@Bean
public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
http.csrf()
.disable()
.authorizeExchange()
.pathMatchers(webEndpointProperties.getBasePath() + "/health/**",
"/" + webEndpointProperties.getBasePath() + "/info/**")
.permitAll()
.and()
.authorizeExchange()
.anyExchange()
.authenticated()
.and()
.oauth2ResourceServer()
.jwt();
return http.build();
}
}
现在允许执行器端点被允许,其他调用必须使用令牌进行身份验证。