通过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,并将转换器设置到过滤器中。
@Beanpublic X509AuthenticationConverter x509AuthenticationConverter() {
return new X509AuthenticationConverter();
}
@Bean
public AuthenticationWebFilter x509AuthenticationWebFilter(ReactiveAuthenticationManager reactiveAuthenticationManager,
X509AuthenticationConverter x509AuthenticationConverter) {
AuthenticationWebFilter authenticationWebFilter = new AuthenticationWebFilter(reactiveAuthenticationManager);
authenticationWebFilter.setAuthenticationConverter(x509AuthenticationConverter);
return authenticationWebFilter;
}
最后配置安全性
@BeanSecurityWebFilterChain springWebFilterChain(ServerHttpSecurity http, AuthenticationWebFilter x509AuthenticationWebFilter) {
return http
.addFilterAt(x509AuthenticationWebFilter, SecurityWebFiltersOrder.AUTHENTICATION)
//...
.build();
}
这将与其他身份验证机制一样有效。
以上是 通过WebFlux的证书认证? 的全部内容, 来源链接: utcz.com/qa/419320.html