Java – Spring Framework / Spring Security中基于表单和基于证书的身份验证

是否可以在spring框架中同时为登录页面实现2个登录实现?表单登录和基于证书的登录(x509).我尝试过这两种方法中的任何一种,但同时将它们组合在一起,我很难做到这一点.知道如何启用这两种方法吗?我可以参考的任何书籍或网站参考?

谢谢

解决方法:

是的,可以通过使SSL client-auth可选.

Here on Baeldung是一个很好的教程,使用强制客户端身份验证启用带有X.509证书的SSL客户端身份验证(不适合您的情况,使用登录表单回退)

按照该教程并注意application.properties文件,以使client-auth想要而不是需要.这将使客户端 – 服务器SSL握手尝试请求证书.

server.ssl.client-auth=want

>如果浏览器未提供证书(没有任何配置或用户在提示从列表中选择证书时单击取消),则SSL握手将在没有客户端证书的情况下完成,并且用户必须登录用户名密码
>如果用户选择证书,则SSL握手将使用客户端证书完成.然后,服务器验证信任库中的给定证书.如果证书有效,则成功建立SSL握手.否则,服务器拒绝连接.

注意那个

>仅使用x.509证书进行身份验证.对于授权,您必须提供X509ConfigurerUserDetailsService实现,以便为刚刚通过x.509进行身份验证的用户检索UserDetails
>因此,如果您拥有一个具有指定角色的用户数据库,即使该证书位于信任库中,该用户也可能不在用户数据库中,因此您必须在应用程序逻辑中处理这种可能性.即当SSL连接是相互的时,但用户不在用户数据库中.

上一篇:docker pull x509:certificate signed by unknown authority


下一篇:c – 如何使用OpenSSL从证书中提取所有OID