尝试启用用户帐户并获得以下错误。如果我在创建用户(使用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\n\u0000]; nested exception is javax.naming.OperationNotSupportedException: [LDAP: error code 53 - 0000052D: SvcErr: DSID-031A12D2, problem 5003 (WILL_NOT_PERFORM), data 0\n\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 =企业支持{[email protected],描述=测试帐户,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进行密码属性更新。