gpt4 book ai didi

java - 与 Active Directory 中未列出的用户建立 LDAP 连接

转载 作者:太空宇宙 更新时间:2023-11-04 09:30:12 26 4
gpt4 key购买 nike

我有一个 IP、用户名和密码,用于通过 Active Directory Explorer 连接到 Active Directory。我正在尝试使用这些凭据通过 Java 建立连接。但是我登录服务器的账号并没有在AD中列出。

IP="1.1.1.20"
Username="Bob"
Password="password123"

更复杂的是,我在 1.1.1.20 上连接的 Activity 目录的基本 DN 与用户完整 DN 中包含的基本 DN 不同。

1.1.1.20 的基本 DN 是 dc=test,dc=this,dc=com,而我用来登录的帐户的 DN 是

CN=Bob,OU=People,OU=Something,OU=Blah,DC=Fake,DC=Data,DC=local,DC=com

我已经尝试了所有我能想到的用户名和 DN 组合,使用下面的代码片段来建立连接。

Hashtable<String, Object> env = new Hashtable<String, Object>();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://1.1.1.20:389");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "CN=Bob,OU=People,OU=Something,OU=Blah,DC=Fake,DC=Data,DC=local,DC=com");
env.put(Context.SECURITY_CREDENTIALS, "password123");
DirContext ctx = null;
try{
ctx = new InitialDirContext(env);

当我注释掉 SECURITY_PRINCIPAL 和 SECURITY_CREDENTIALS 行时,我能够建立匿名连接,但当使用为我提供的 Active Directory Explorer 用户名和密码时,我无法创建连接。

我知道用户名和密码是正确的,因为我可以使用 Active Directory 资源管理器登录它们,因此我假设当我组合用户名和 baseDN 创建主体时会出现问题。

是否有可能,或者我用于登录的帐户是否需要在我正在查看的同一服务器上找到?

最佳答案

看来您知道您正在使用的帐户的完整 DN,因此应该可以。

我怀疑该域禁用了简单例份验证,或者由于该帐户与您连接的域位于不同的域而不允许简单例份验证。

因此,这可能就像将身份验证方法更改为 Kerberos 一样简单。尝试将设置 Context.SECURITY_AUTHENTICATION 的行替换为:

env.put(Context.SECURITY_AUTHENTICATION, "GSSAPI");

参见this answer了解更多详情。

更新:如果这不起作用,那么您可以使用 AD Explorer 检查支持的身份验证机制。

  1. 右键点击域的根目录,然后点击“属性”。
  2. 点击“RootDSE 属性”选项卡。
  3. 查找“supportedSASLMechanisms”属性(可能是列表中的最后一个)。

尝试该属性中的每个值,看看它们是否有效。

关于java - 与 Active Directory 中未列出的用户建立 LDAP 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57171796/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com