【发布时间】:2017-04-02 15:29:11
【问题描述】:
好吧,这快把我逼疯了。我正在尝试使用 Java 创建 LDAP 身份验证,如果我在 SECURITY_PRINCIPAL 中使用我的名字和姓氏,一切都很好。这是我的代码:
try {
Hashtable<String, String> ldapEnv = new Hashtable<String, String>();
ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
ldapEnv.put(Context.PROVIDER_URL, "LDAP://myldap.mydomain.com:389");
ldapEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
ldapEnv.put(Context.SECURITY_PRINCIPAL, "CN=FirstName LastName" + ",ou=Users");
ldapEnv.put(Context.SECURITY_CREDENTIALS, "password");
DirContext ldapContext = new InitialLdapContext(ldapEnv, null);
}
catch (Exception e) {
System.out.println(" bind error: " + e);
e.printStackTrace();
}
问题是它不适用于我的用户名。如果我尝试:
ldapEnv.put(Context.SECURITY_PRINCIPAL, "CN=myusername" + ",ou=Users");
或者
ldapEnv.put(Context.SECURITY_PRINCIPAL, "uid=myusername" + ",ou=Users");
我总是得到[LDAP: error code 49 - 80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e, v1db1]
出于某种原因,这似乎只适用于我的名字和姓氏。我检查了广告,我的 sAMAccountName 是我正确的用户名。不知道为什么会这样。其他人有这样的问题吗?我可以将其他内容传递给 Context.SECURITY_PRINCIPAL 吗?我试过ldapEnv.put(Context.SECURITY_PRINCIPAL, "sAMAccountName=myusername" + ",ou=Users");,但它也失败了......有人可以帮忙吗?
【问题讨论】: