4

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

谢谢

4

2 回答 2

2

是的,可以通过使 SSL 客户端身份验证可选。

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

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

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

请注意

  • 仅使用 x.509 证书进行身份验证。对于授权,您必须为X509Configurer提供一个UserDetailsS ​​ervice实现,以检索刚刚通过 x.509 进行身份验证的用户的UserDetails
  • 因此,如果您有一个具有分配角色的用户数据库,即使证书在信任库中,用户也可能不在用户数据库中,因此您必须在应用程序逻辑中处理这种可能性。即当 SSL 连接是相互的,但用户不存在于用户数据库中时。
于 2017-04-14T12:40:28.897 回答
0

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

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

并在 Tomcat 中配置 SSL。

请参阅此条目此线程

于 2013-01-18T10:21:34.033 回答