Java 如何使用Windows身份验证调用Active Directory而不提示输入用户名/密码?

Java 如何使用Windows身份验证调用Active Directory而不提示输入用户名/密码?,java,command-line,active-directory,windows-authentication,Java,Command Line,Active Directory,Windows Authentication,您可以在以下文章中看到使用Java中的InitialLdapContext类访问LDAP的示例: 这需要传入登录名和密码(即使运行java进程的服务帐户或用户已经登录才能运行) 由于用户或服务帐户已登录-他们可以在不使用用户名或密码的情况下运行如下active directory命令: dsquery user -samid "login" |dsget user -samid -email -display 那么,如果Windows已经可以使用此查询,为什么Java需要登录密码呢?Kos

您可以在以下文章中看到使用Java中的
InitialLdapContext
类访问LDAP的示例:

这需要传入登录名和密码(即使运行java进程的服务帐户或用户已经登录才能运行)

由于用户或服务帐户已登录-他们可以在不使用用户名或密码的情况下运行如下active directory命令:

dsquery user -samid "login" |dsget user -samid -email -display
那么,如果Windows已经可以使用此查询,为什么Java需要登录密码呢?Kosuke暗示,这篇博文在结论中没有要求:

如果没有以下条件,我们如何在Java中调用Active Directory:

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

    • 这可能是因为

      • 您正在使用LDAP库/上下文与Active Directory进行通信,这些库需要支持其他类型的LDAP(AD是否算作LDAP?)
      • 这些实现的提供者就是需要它的人。LDAP通信是通过提供实现的提供者完成的,而不是由实际的Java运行时完成
      • 当前用户的密码不是(我希望)由Windows提供给Java的
      当Windows在您运行需要AD的应用程序时根据AD对您进行身份验证时,除了您的实际密码外,它还会显示一些其他凭据集。这些凭证在Java中不可用,或者至少LDAP通讯器的提供者都没有提供检索凭证的方法

      Kohsuke进一步阐述了为什么在Java土地上,当涉及到Active Directory时,事情是这样的