1

我想知道我应该指定什么“主体”来登录 Active Directory 服务器。委托人应该是我尝试登录的 AD 中的用户吗?或者它可以是我指定的域中的用户,只要该用户具有访问 AD 的权限?

我尝试使用凭据错误 49。但我可以使用安装 AD 的服务器的管理员帐户使用 ldp.exe 登录到 AD。

这是我的代码。非常感谢您的及时帮助。

Hashtable env= new Hashtable(11);
env.put(Context.SECURITY_AUTHENTICATION,"simple"); // Also tried none w/ the same error

// What principal should I use??
env.put(Context.SECURITY_PRINCIPAL,"CN=Ross,OU=Eng,DC=RossInc");//User
//env.put(Context.SECURITY_PRINCIPAL, user + "@" + domain); // Tried w/ the same error

env.put(Context.SECURITY_CREDENTIALS, "ross");//Password
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL,"ldap://myserver:389/DC=RossInc");

DirContext ctx = new InitialDirContext(env); <-- Fails with AuthenticationException: [LDAP: error code 49 - 8009030C
4

2 回答 2

0

根据 Oracle 站点的以下示例,安全主体是一个专有名称。

以下是域内计算机上为我工作的一些代码:

Hashtable<String, String> ldapEnv = new Hashtable<String, String>(11);
ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
ldapEnv.put(Context.PROVIDER_URL,  "ldap://societe.fr:389");
ldapEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
ldapEnv.put(Context.SECURITY_PRINCIPAL, "cn=administrateur,cn=users,dc=societe,dc=fr");
ldapEnv.put(Context.SECURITY_CREDENTIALS, "test.2011");
ldapContext = new InitialDirContext(ldapEnv);

委托人可以是 AD 内的用户,只要他具有访问 AD 的权限即可。

于 2011-11-09T10:23:44.797 回答
0

您可以提供:

  • NT 风格的登录名
  • Kerberos UPN(隐式 UPN)
  • 显式 UPN(如果已定义其他 UPN 就足够了)

更重要的是,永远不要执行简单的绑定!摘要或 GSS-API。

于 2011-11-17T18:52:21.147 回答