http://support.microsoft.com/kb/892424
当在 Active Directory 上设置“交互式登录需要智能卡”时,它会生成随 secret 码。如何利用智能卡通过 LDAP 从 Web 应用程序对用户进行身份验证?
我如何知道用户是谁?有没有办法访问证书?我可以从 session 中获取它吗?
最佳答案
为此应使用 HTTPS 和 SSL 相互身份验证,因为客户端在其智能卡上已存储至少企业 CA 签名的证书。
当使用相互 SSL 身份验证而不只是服务器身份验证时,客户端证书也会由服务器验证,而不仅仅是客户端的服务器证书(这对于启用 HTTPS 的电子商务网站来说是更常见的设置)。而且您仍然可以获得加密连接作为奖励。
参见例如Tomcat 6.0 SSL Configuration HOW-TO 。关键点是将 trust-store 中的 CA 证书和 clientAuth 属性设置为 true。
还应在相应 Web 应用程序的 web.xml 中将登录身份验证方法指定为 CLIENT-CERT:
...
<login-config>
<auth-method>CLIENT-CERT</auth-method>
<realm-name>Foo * Bar * Realm</realm-name>
</login-config>
...
客户端证书中的SubjectDN 属性用于识别用户。 LDAP(或 ActiveDirectory)仍可用于授权 - 例如通过检查用户是否属于某个组。
第一次完成所有设置可能会很困难。为了熟悉所有概念,我建议采用以下方法:
- 使用 BASIC 身份验证方法,将用户名和密码存储在文件中
- 使用简单的基于角色的授权
- 启用 CLIENT-CERT 身份验证方法 + 基于角色的简单授权
- 合并 LDAP 以检查角色
关于java - 如何对设置为 "Smart card is required for interactive logon"的用户进行身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/885005/