通过WebFlux的证书认证?

在常规的Servlet

APISpring Boot网络,还有就是.x509()对的HttpSecurity配置。但是在WebFlux中,ServerHttpSecurity找不到类似的东西。

.x509().subjectPrincipalRegex(...)WebFlux中的等效项是什么

最终目标是获取证书主题作为发送给的用户名ReactiveUserDetailsService

回答:

我认为没有像Spring的早期版本中那样有X509过滤器,因此您必须实现自己的版本。幸运的是,org.springframework.security.web.server.authentication.AuthenticationWebFilter该工具为身份验证流程提供了模式,但是您必须自己从证书/请求中提取主题。

您要做的第一件事是设置身份验证转换器,以从证书中提取主题。

public class X509AuthenticationConverter implements Function<ServerWebExchange, Mono<Authentication>> {

@Override

public Mono<Authentication> apply(ServerWebExchange exchange) {

ServerHttpRequest request = exchange.getRequest();

try {

// extract credentials here

Authentication authentication = ...

return Mono.just(authentication);

} catch (Exception e) {

// log error here

return Mono.empty();

}

}

}

现在在我们的配置中,我们创建过滤器和转换器bean,并将转换器设置到过滤器中。

@Bean

public X509AuthenticationConverter x509AuthenticationConverter() {

return new X509AuthenticationConverter();

}

@Bean

public AuthenticationWebFilter x509AuthenticationWebFilter(ReactiveAuthenticationManager reactiveAuthenticationManager,

X509AuthenticationConverter x509AuthenticationConverter) {

AuthenticationWebFilter authenticationWebFilter = new AuthenticationWebFilter(reactiveAuthenticationManager);

authenticationWebFilter.setAuthenticationConverter(x509AuthenticationConverter);

return authenticationWebFilter;

}

最后配置安全性

@Bean

SecurityWebFilterChain springWebFilterChain(ServerHttpSecurity http, AuthenticationWebFilter x509AuthenticationWebFilter) {

return http

.addFilterAt(x509AuthenticationWebFilter, SecurityWebFiltersOrder.AUTHENTICATION)

//...

.build();

}

这将与其他身份验证机制一样有效。

以上是 通过WebFlux的证书认证? 的全部内容, 来源链接: utcz.com/qa/419320.html

回到顶部