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

标签 java spring spring-security x509 digital-certificate

在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/

相关文章:

java - @AuthenticationPrincipal 抛出异常

java - 如何使用 token 安全地连接到 RESTHeart

java - 如何在 Java 类中同步系统时间访问

java - 微服务和maven结构

java - xml 文件中的 Spring 表达式语言扩展

java - Spring 安全 : How to use multiple URL patterns in FilterRegistrationBean?

java - Spring Boot @OneToMany 映射

spring-mvc - 如何使@PreAuthorize 具有比@Valid 或@Validated 更高的优先级

java - 下载旧版本的 SonarQube Java 插件

java - 使用 Spring Security @configuration 的同一应用程序中的两个领域