当前位置: 首页 > 面试题库 >

通过WebFlux的证书认证?

从阎宝
2023-03-14
问题内容

在常规的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();
}

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



 类似资料:
  • 我想写一些可以枚举和使用(签名)证书在货币用户/我和LocalMachine/我,但我还没有能够找到任何Windows证书存储,只有Java自己的秘密存储。这个链接看起来很有希望,但我只能使用Java。 我以前在SO上发现过这个问题,但这是五年前的问题,在计算机时代是很长的时间了。谢谢!

  • 我试图使用证书对本地托管的Kubernetes集群(V1.6.4)进行身份验证。这是在使用Jenkins的Kubernetes插件的上下文中进行的。 > 将客户端证书转换为PKCS: 在Jenkins中,使用证书创建凭据 : :和上载文件 :(在证书创建过程中指定) null 2017年09月05日上午10:22:03 IO.fabric8.kubernetes.client.config try

  • 我正在运行带有公开WebSocketendpoint的服务器。下面是我的: 问题是如何使用或或查询参数实现建立WS连接的身份验证? 更好的选择是避免使用Spring Security。 多谢了。

  • null 大多数示例使用makecert或New-SelfSignedCertificate创建证书。在这种情况下,对于生产应用程序,自签名证书是否有问题?这仅供应用程序使用Azure Key Vault进行身份验证,客户机在浏览器中不会看到这一点。 如果在这种情况下,自签名证书仍然不受欢迎,那么从受信任的权威机构购买证书是否与购买SSL/TLS证书的过程相同?甚至是同一类型的证书吗?

  • 问题内容: 我正在使用Java 6,并尝试使用客户端证书针对远程服务器创建一个。 服务器正在使用自签名的根证书,并且要求提供受密码保护的客户端证书。我已将服务器根证书和客户端证书添加到在中找到的默认Java密钥库中。密钥库文件的名称似乎表明不应将客户端证书放入其中? 无论如何,将根证书添加到此存储解决了臭名昭著的问题 但是,我现在停留在如何使用客户端证书上。我尝试了两种方法,但都无济于事。 首先,

  • 我有一个Spring MVC应用程序,它使用Spring Security性和基于表单的登录进行授权/身份验证。 现在我想添加一个特殊的URL,其中包括一个令牌,该令牌应该可以在没有其他信息的情况下访问,因为该令牌对用户来说是唯一的: http://myserver.com/special/5f6be0c0-87d7-11e2-9e96-0800200c9a66/text.pdf 如何配置Spri

  • Dokuwiki通过连接LDAP服务器进行认证登;一、配置所需环境:;1、安装完成并且配置正确的LDAP服务器;2、下载并安装最新的dokuwiki,并进行安装;3、确保服务器PHP已安装LDAP扩展;二、配置Dokuwiki采用LDAP认证登陆;1、打开插件管理器;2、安装Authldap插件,勾选authlda;3、进行配置设置;4、具体配置参数;其中参 Dokuwiki通过连接LDAP服务器

  • 下面是一个例子: 我还将ingress配置为在所有主机名上使用机密,而不指定host:tls:-secretname:******WTE-Ingress