LDAP:错误代码49 - 80090308:LdapErr:DSID-0C0903A9,注释:AcceptSecurityContext错误,数据52e,v1db1
我知道“52e”代码是当用户名有效时,但密码无效。我在apache studio中使用相同的用户名和密码,我能够成功建立与LDAP的连接。
这是我的java代码
String userName = "*******";
String password = "********";
String base ="DC=PSLTESTDOMAIN,DC=LOCAL";
String dn = "cn=" + userName + "," + base;
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://******");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, dn);
env.put(Context.SECURITY_CREDENTIALS, password);
LDAPAuthenticationService ldap = new LDAPAuthenticationService();
// LdapContext ctx;
DirContext ctx = null;
try {
ctx = new InitialDirContext(env);
我的错误就在这一行:ctx = new InitialDirContext(env);
我不知道究竟是什么导致了这个错误。
答案 0 :(得分:20)
对我来说,当我设置这样的主要部分时,问题就解决了:
env.put(Context.SECURITY_PRINCIPAL, userId@domainWithoutProtocolAndPortNo);
答案 1 :(得分:12)
52e 1326 ERROR_LOGON_FAILURE当用户名有效但密码/凭证无效时返回。将防止显示大多数其他错误。
http://ldapwiki.com/wiki/Common%20Active%20Directory%20Bind%20Errors
答案 2 :(得分:6)
当将Context.SECURITY_AUTHENTICATION用作“简单”时,需要提供userPrincipalName属性值(user @ domain_base)。
答案 3 :(得分:4)
在CAS上使用AD时出现了类似的问题,即52e错误,在我的情况下,应用程序在CN =而不是实际用户名时接受全名。
例如,如果你有一个用户的全名是Ross Butler并且他们的登录用户名是rbutler - 你通常会输入类似的东西,例如cn = rbutler,ou = Users,dc = domain,dc = com但是我们的失败了每次。通过将此更改为cn = Ross Butler,ou = Users,dc = domain,dc = com它已通过!!
答案 4 :(得分:3)
就我而言,我必须使用类似@的名称才能成功登录。
sample_user @ sample_domain
答案 5 :(得分:2)
对我来说,通过在用户名中添加域名来解决此问题,如下所示:
string userName="yourUserName";
string password="passowrd";
string hostName="LdapServerHostName";
string domain="yourDomain";
System.DirectoryServices.AuthenticationTypes option = System.DirectoryServices.AuthenticationTypes.SecureSocketsLayer;
string userNameWithDomain = string.Format("{0}@{1}",userName , domain);
DirectoryEntry directoryOU = new DirectoryEntry("LDAP://" + hostName, userNameWithDomain, password, option);
答案 6 :(得分:2)
如果您调试并查看ctx = null,也许您的用户名hava问题,您应该这样写: “ ac \ administrator”(双“ \”)或“ administrator @ ac”
答案 7 :(得分:1)
在将事务发送到另一个服务器数据库时,LDAP正在尝试使用AD进行身份验证。此身份验证失败,因为用户最近更改了密码,尽管此事务是使用以前的凭据生成的。此身份验证将一直失败,直到...除非您将事务状态更改为“完成”或“取消”,在这种情况下,LDAP将停止发送这些事务。
答案 8 :(得分:0)
对我来说,通过更改环境可以解决此问题:
env.put("LDAP_BASEDN", base)
env.put(Context.SECURITY_PRINCIPAL,"user@domain")
答案 9 :(得分:0)
使用域名可以解决问题(使用powershell获取域名: $ env:userdomain ):
$input = [
'id_coretable' => 1,
'Internal_key' => 'TESTKEY_1',
'extensiontable_itc' => [
'description_itc' => 'EXTENSION_ITC_1',
],
'extensiontable_sysops' => [
'description_sysops' => 'EXTENSION_SYSOPS_1',
],
];
$permittedTables = ['extensiontable_itc', 'extensiontable_sysops'];
$core = Core::with($permittedTables)->find(1);
// Update extensiontable_itc
$core->extensiontable_itc->update($input['extensiontable_itc']);
// Update extensiontable_sysops
$core->extensiontable_sysops->update($input['extensiontable_sysops']);
答案 10 :(得分:0)
对我来说,问题的原因是用户名的格式不正确。它早先被指定为“mydomain\user”。我删除了域部分,错误消失了。
PS 我使用的是 ServerBind 身份验证。