2

InitialLdapContext您可以在以下帖子中看到使用 Java 中的类访问 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 进程的服务帐户或用户已经登录才能运行)。

由于用户或服务帐户已经登录 - 他们已经可以在没有用户名或密码的情况下运行如下活动目录命令:

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,而无需:

  • 使用登录名或密码(在已登录的帐户下运行)?
  • 在命令行上执行命令?
4

1 回答 1

3

这可能是因为

  • 您正在使用 LDAP 库/上下文与 Active Directory 进行通信,并且这些库需要支持其他类型的 LDAP(AD 甚至算作 LDAP 吗?)
  • 这些实现的提供者是需要它的提供者。LDAP 通信是通过提供实现的提供者完成的,而不是由实际的 Java 运行时完成的。
  • 当前用户的密码不是(我希望)由 Windows 实际提供给 Java 的。

当 Windows 在您运行需要它的应用程序时针对 AD 对您进行身份验证时,除了您的实际密码之外,它还会提供一些其他凭据集。这些凭证在 Java 中不可用,或者至少没有 LDAP 通信器的提供者提供检索它的方法。

在他关于该主题的另一篇博文中, Kohsuke 进一步扩展了为什么在涉及 Active Directory 时事物在 Java 领域是这样的。

于 2009-06-18T02:43:23.300 回答