java - 仅当这是用户选择对系统进行身份验证的选项时,如何启用相互身份验证?

标签 java ssl tomcat mutual-authentication

我们为用户提供不同类型的身份验证机制来验证我们的应用程序。 其中之一是使用安装在其上的智能卡证书。所以我配置了 tomcat server.xml 文件(clientAuth = true)并将客户端证书添加到我的 keystore 文件中。当用户点击主页时,浏览器上会弹出用户的身份验证证书列表。当用户选择其中之一进行身份验证时,它会重定向到我们显示身份验证方法列表的欢迎页面(登录页面)。但是我想要实现的是,当用户点击主页时,仍然应该首先显示欢迎页面。如果用户在这种情况下选择仅通过证书进行身份验证,我们应该启用相互身份验证并在浏览器上显示用户的证书。但是,如果这不是用户选择的选项,我们不应该要求最终用户提供证书并使用他们选择的不同选项来验证他们。我不能使用 clientAuth=want ,证书列表仍然会在登录页面之前弹出。

目前我很困惑,因为我无法弄清楚如何仅使用一个 tomcat server.xml 文件来根据用户偏好来适应不同的情况。任何实现它的指南/提示表示赞赏。

最佳答案

简短的回答是你不能仅仅通过配置来做到这一点。您将需要至少编写一个自定义 Authenticator,可能还需要编写一个自定义 Realm。

如果您使用 Web 应用程序的多个实例,则应该可以使用仅配置解决方案。 1 个需要 CLIENT-CERT,另一个使用替代方案。缺点是您必须两次部署基本相同的应用程序,只是使用不同的身份验证配置。

关于java - 仅当这是用户选择对系统进行身份验证的选项时,如何启用相互身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56832395/

相关文章:

java - 从 Tomcat 6 CometProcessor 中写入是非阻塞的

java - 方法参数的@Pattern注解

mongodb - Mongodb 中的 Scons

docker - Windows的Docker CE-无法建立SSL连接。根据验证步骤,远程证书无效

java - JAR 库到 TomCat

jsp - 服务方法中的 request.getPathInfo() 怎么会返回 null?

java - Heroku 在 Java REST API 应用程序启动期间说 "Process exited with status 0"

java - Hibernate JPA 在生成 ID 时检查冲突

java - 具有无限预定义值的 ArrayList

amazon-web-services - 将子域指向 Cloudfront 时连接不安全