java - 如何对设置为 "Smart card is required for interactive logon"的用户进行身份验证?

标签 java active-directory smartcard pki

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/

相关文章:

java - Java 中的多线程,跟踪成功和失败的任务

Java Hadoop - Reducer 在使用 Combiner 类时多次接收同一个键的不同值

Java ArrayList相同字符串分组并获取出现次数最多的String

Java - JNDI/Active Directory/Kerberos/WebLogic Server - 密码配置

Delphi - 从事件目录获取用户电子邮件地址

c# - 模拟认证

java - JApplet 在 ObjectInputStream.readObject 上遇到 java.lang.OutOfMemoryError 异常(来源未知)

c++ - 如何在 C++ 中使用单个 APDU 发送和获取数据?

android - 如何在智能卡读卡器中实现被动认证?

asp.net - 如何提取 Outlook 显示的相同员工 ID 属性值?