在spring框架中,登录页面是否可以同时实现2个登录?表单登录和基于证书的登录 (x509)。我已经尝试过这些方法中的任何一种,但同时将它们结合起来,我很难做到。知道如何启用这两种方法吗?关于这方面我可以引用的任何书籍或网站引用资料?
谢谢
最佳答案
是的,通过将 SSL 客户端身份验证设为可选,这是可能的。
Here on Baeldung是关于使用 X.509 证书启用 SSL 客户端身份验证的好教程,强制客户端身份验证(不适合您的情况,使用登录表单回退)
遵循该教程并注意 application.properties 文件,使客户端身份验证想要而不是需要。这将使客户端-服务器 SSL 握手尝试请求证书。
server.ssl.client-auth=want
- 如果浏览器不提供证书(没有任何配置或用户在提示从列表中选择证书时单击取消),SSL 握手将在没有客户端证书的情况下完成,用户将拥有使用用户名+密码登录
- 如果用户选择证书,SSL 握手将使用客户端证书完成。然后服务器在信任库中验证给定的证书。如果证书有效,则成功建立 SSL 握手。否则,连接将被服务器拒绝。
注意
- 仅使用 x.509 证书进行身份验证。要获得授权,您必须提供 X509Configurer一个UserDetailsService实现,检索 UserDetails对于刚刚通过 x.509 进行身份验证的用户
- 因此,如果您有一个用户数据库以及分配给他们的角色,即使证书在信任库中,用户也可能不在用户数据库中,因此您必须在应用程序逻辑中处理这种可能性. IE。当 SSL 连接是相互的,但用户不在用户数据库中时。
关于java - Spring Framework/Spring Security 中基于表单和基于证书的身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14391125/