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

时间:2013-01-18 01:29:13

标签: java spring spring-security x509 digital-certificate

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

由于

2 个答案:

答案 0 :(得分:1)

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

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

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

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

注意

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

答案 1 :(得分:0)

是的,这是可能的。您只需在http config中声明x509支持:

<http ...>
    ...
    <x509 ... />
    ....
</http>

并在Tomcat中配置SSL。

请参阅this entrythis thread