仅使用承载器保护Spring云网关



我目前想用Spring Cloud Gateway来保护我的微服务架构。FrontEnd向Keycloak服务器验证自己,然后在每个请求时发送令牌。现在的情况是,只有网关应该向外部公开,而各个服务将不能从外部访问。

如何在keycloak服务器上验证承载令牌?

我已经在互联网上搜索了一段时间,但还没有找到任何令牌已被验证的地方。在任何地方,身份验证都是通过网关完成的,然后由各个服务验证令牌。但是,当我将网关声明为OAuth2资源服务器时,整个事情就不起作用了。

我设法使它工作了。

我的安全配置如下:

@Configuration
@EnableWebFluxSecurity
public class SecurityConfig {
@Bean
public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
http.authorizeExchange(exchanges -> exchanges.anyExchange().authenticated())
.oauth2ResourceServer().jwt();
http.csrf().disable();
return http.build();
}
}

此外,但没有必要,我添加了一个CorsFilter:

@Configuration
public class PreFlightCorsConfiguration {
@Bean
public CorsWebFilter corsFilter() {
return new CorsWebFilter(corsConfigurationSource());
}
@Bean
CorsConfigurationSource corsConfigurationSource() {
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration().applyPermitDefaultValues();
config.addAllowedMethod( HttpMethod.GET);
config.addAllowedMethod( HttpMethod.PUT);
config.addAllowedMethod( HttpMethod.POST);
config.addAllowedMethod( HttpMethod.OPTIONS);
config.addAllowedMethod(HttpMethod.DELETE);
source.registerCorsConfiguration("/**", config);
return source;
}
}

我使用的安全依赖项是:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-security</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>

最新更新