首页 文章

Spring Security 5中的路径安全性

提问于
浏览
1

使用org.springframework.security:spring-security-oauth2-resource-server5.1.0.RC2(通过org.springframework.boot:spring-boot-starter-security:2.1.0.M3)我正在尝试启用安全性一些http路径,但使用基于JWT的令牌安全性为其他人禁用它 .

我尝试了以下方法,但它在各种路径和http方法上的执行安全性不一致:

  • 强制执行GET /帐户?名称=正在检查

  • 在POST /帐户上强制执行

  • 未在GET / customers上强制执行?name = John

  • 在POST /客户上强制执行

为什么它会强制执行POST给/ customers?

@Configuration
public class SecurityConfig {

    @Autowired
    private ReactiveJwtDecoder jwtDecoder;

    @Bean
    public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
        // @formatter:off
        http
            .authorizeExchange().pathMatchers("/customers").permitAll()
                .and()
            .authorizeExchange().pathMatchers("/customers/**").permitAll()
                .and()
            .authorizeExchange().pathMatchers("/accounts/**").authenticated()
                .and()
            .oauth2ResourceServer()
                .jwt().jwtDecoder(this.jwtDecoder);
        // @formatter:on

        return http.build();
   }

}

1 回答

  • 1

    我通过两件事部分解决了这个问题:

    • 添加了csrf() . disable()(也许这没关系,因为这些是无状态REST服务?)

    • 在我发送授权 Headers 之前,我提到auth正在执行 . 我认为它会跳过授权,即使有 Headers ,但无论如何它都会处理它 .

    更新的代码:

    @Bean
    public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
        // @formatter:off
        http
            .csrf()
                .disable()
            .authorizeExchange().pathMatchers("/customers/**").permitAll()
                .and()
            .authorizeExchange().pathMatchers("/accounts/**").authenticated()
                .and()
            .oauth2ResourceServer()
                .jwt().jwtDecoder(this.jwtDecoder);
    
        return http.build();
    }
    

相关问题