LDAP - 无法使用spring java ldap api启用用户

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LDAP - 无法使用spring java ldap api启用用户相关的知识,希望对你有一定的参考价值。

尝试启用用户帐户并获得以下错误。如果我在创建用户(使用java api)和更新密码(在Windows机器上手动使用UI)之后直接转到该Windows机器,如“password1”,然后尝试使用java启用密码,它可以正常工作。

以下是我在创建用户时设置密码的方法

BasicAttribute basicAttribute1=new BasicAttribute("userPassword","password1".getBytes(StandardCharsets.US_ASCII));
            context.setAttribute(basicAttribute1);

然后尝试将用户帐户控制更改为512并获取

 "errorMessage": "[LDAP: error code 53 - 0000052D: SvcErr: DSID-031A12D2, problem 5003 (WILL_NOT_PERFORM), data 0
u0000]; nested exception is javax.naming.OperationNotSupportedException: [LDAP: error code 53 - 0000052D: SvcErr: DSID-031A12D2, problem 5003 (WILL_NOT_PERFORM), data 0
u0000]; remaining name 'CN=SachinVTendulkar,OU=SDCWASD001,OU=Users,OU=Mycity,OU=Enterprise Support'"

似乎我在使用java创建用户时没有正确设置密码 - 我使用userAccountControl-514创建用户,并使用密码以及名称等其他属性(首先我想在禁用模式下创建)

然后当我尝试启用用户时,遇到此问题。对于同一个用户,如果我去Windows机器并更新密码然后尝试启用java它工作正常 - 所以排除其他问题,如ldaps等。

我创建用户以供参考时记录:

创建用户的日志:创建新用户:JohnSmith,DN:CN = JohnSmith,OU = SDCWASD001,OU = Users,OU = MyCity,OU = Enterprise Support,带上下文:org.springf.ldap.core.DirContextAdapter:dn = CN = JohnSmith,OU = SDCWASD001,OU =用户,OU = MyCity,OU =企业支持{mail=adsadsa51@test.com,描述=测试帐户,CN = JohnSmith,objectclass [0] = top,objectclass [1] = Person,objectclass [2] = organizationalPerson,objectclass [3] = user,userPassword = summer01,sAMAccountName = adsadsa51,userPrincipalName=adsadsa51 @ test.com,givenName = John,displayName = JohnSmith,name = JOHNSMITH,physicalDeliveryOfficeName = 0,sn = Smith,userAccountControl = 514}

然后为了启用用户,我执行以下操作并获得该错误(我在单独调用中执行此操作)

ModificationItem[] mods=new ModificationItem[1];
         mods[0]=new ModificationItem(DirContext.REPLACE_ATTRIBUTE,new BasicAttribute("userAccountControl",Integer.toString(512)));
 ldapTemplate.modifyAttributes(dn, mods);
答案

尝试设置unicodePwd value on the account。就像是:

final byte[] quotedPasswordBytes = ('"'+password+'"').getBytes("UTF-16LE");
    container.put(new BasicAttribute("unicodePwd", quotedPasswordBytes));
另一答案

解决方案是使用SSL进行密码属性更新。

以上是关于LDAP - 无法使用spring java ldap api启用用户的主要内容,如果未能解决你的问题,请参考以下文章

Grails:有条件地加载 Spring Security LDAP 插件

本地数据库上的 Spring Security LDAP 用户数据缓存

在java Spring Boot中,如何在集成测试中将内存中的LDAPConnection对象传递给ldapService?

无法使用具有正确凭据的 Spring 3.1 验证 LDAP 帐户

Spring Security & Active Directory LDAP 错误 32 问题 2001 (NO_OBJECT)

带有 LDAP 注销的 Spring Security 无法删除会话