您可以在以下帖子中查看使用 Java 中的 InitialLdapContext
类访问 LDAP 的示例:
http://forums.sun.com/thread.jspa?threadID=603815
http://forums.devshed.com/ldap-programming-76/active-directory-services-using-java-api-89586.html
这需要传入登录名和密码(即使运行 java 进程的服务帐户或用户已经登录才能运行)。
由于用户或服务帐户已经登录 - 他们已经可以运行如下所示的 Active Directory 命令,而无需用户名或密码:
dsquery user -samid "login" |dsget user -samid -email -display
如果 Windows 已经可以使用此查询,为什么 Java 还需要登录密码呢? Kosuke 暗示在这篇博客文章的结论中不需要这样做:
https://community.oracle.com/blogs/kohsuke/2008/06/12/more-active-directory-integration-java
我们如何在 Java 中调用 Active Directory,而不需要:
- 使用登录名或密码(在已登录的帐户下运行)?
- 在命令行上执行命令?
最佳答案
发生这种情况可能是因为
- 您正在使用 LDAP 库/上下文与 Active Directory 进行通信,并且这些库需要支持其他类型的 LDAP(AD 也算作 LDAP 吗?)
- 这些实现的提供者就是需要它的人。 LDAP 通信是通过提供实现的提供程序完成的,而不是由实际的 Java 运行时完成的。
- (我希望)当前用户的密码实际上不是由 Windows 提供给 Java 的。
当您运行需要 AD 的应用程序时,当 Windows 对您进行身份验证时,除了您的实际密码之外,它还会提供一些其他凭据集。这些凭据在 Java 中不可用,或者至少 LDAP 通信器的提供商都没有提供检索它的方法。
In his other blog post on the subject Kohsuke 进一步阐述了为什么 Java 领域的 Active Directory 是这样的。
关于java - 如何使用 Windows 身份验证调用 Active Directory,而不提示输入用户名/密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1010356/