spring-security 在Sping Boot Flux应用程序上跳过x509身份验证

zed5wv10  于 2022-11-11  发布在  Spring
关注(0)|答案(1)|浏览(182)

我正在尝试为Sping Boot Flux应用程序建立x509身份验证,但在尝试身份验证期间收到以下消息:
服务器X509身份验证转换器:在SslInfo中找不到对等凭证,正在略过x509验证
当我尝试调试此日志消息中提到的类时,我可以看到证书信息确实为空。
我的当前配置:
Ssl证书是通过Sping Boot 属性(如 server.ssl.key-store)提供的,Ssl连接成功。出于测试目的,我从另一个Spring Boot应用程序(不是Flux应用程序)复制了证书,并使用了有效的x509身份验证。
我需要在本地运行多个应用程序,所以我通过端口来区分它们。
服务器。端口=${端口:8441}
对于Spring安全性,我有一个特定的配置类,用@Configuration和@EnableWebFluxSecurity标注标记。

@Bean
public SecurityWebFilterChain (ServerHttpSecurity http) {
    String endpoint1 = "/first-endpoint-i-want-to-authorize";
    String endpoint2 = "/second-endpoint-i-want-to-authorize";

    http.authorizeExchange(exchanges -> exchanges.matchers(
        new NegatedServerWebExchangeMatcher(new OrServerWebExchangeMatcher(
                Arrays.asList(new PathPatternParserServerWebExchangeMatcher(endpoint1, null),
                new PathPatternParserServerWebExchangeMatcher(endpoint2, null)
            )
        )
        )
    ).permitAll());

    http.authorizeExchange(exchanges -> exchanges.pathMatchers(endpoint1, endpoint2).authenticated())
    .x509(x509 -> x509.principalExtractor(authenticationService).authenticationManager(authenticationService))
    .httpBasic(Customizer.withDefaults())
    .securityContextRepository(NoOpServerSecurityContextRepository.getInstance());

    return http.build();
}

身份证明验证似乎可以与此配置一起使用。此外,authenticationService是一个自动连接的Bean,它实现了所有必需的接口,但它的实现似乎与这种情况的根本原因无关,因为在验证尝试期间没有调用任何已实现的方法。

beq87vna

beq87vna1#

为了避免空证书,客户端授权应设置为“需要”模式。如果通过**.properties**文件进行配置,则可以这样做:
服务器.ssl.客户端验证=需要

相关问题