【问题标题】:Form based and Certificate based authentication in Spring Framework / Spring SecuritySpring Framework / Spring Security 中基于表单和基于证书的身份验证
【发布时间】:2013-01-01 16:52:25
【问题描述】:

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

谢谢

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    注意

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

    【讨论】:

      【解决方案2】:

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

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

      并在 Tomcat 中配置 SSL。

      请参阅 this entrythis thread

      【讨论】:

      • 感谢您的回答。我遇到的问题是在我的登录页面上,我有两个登录身份验证。基于表单和证书身份验证。我将tomcat的server.xml中的clientAuth参数设置为“想要”,当我访问登录页面时,它要求我选择一个证书。单击证书身份验证按钮后,我只想选择证书=)。那可能吗?如何? =)
      • 您使用哪个版本的Tomcat?你可以试试 clientAuth="optional" 吗?
      • 嗨,Maksym Demidas。我正在使用 Tomcat 6.0.36。我没有看到“可选”作为 tomcat 文档中的值。它是否适合您设置为“可选”并提示用户为选定的受保护页面选择证书?我不希望浏览器要求我为登录页面选择证书 =)。谢谢
      • @MaksymDemidas:参考链接已损坏,请更新到当前 - docs.spring.io/spring-security/site/docs/current/reference/html/…
      猜你喜欢
      • 2015-02-06
      • 2010-11-20
      • 2017-07-08
      • 2017-07-10
      • 2013-09-14
      • 2015-03-27
      • 2011-08-16
      • 2015-12-25
      • 2023-03-20
      相关资源
      最近更新 更多