LDAP - 无法使用 spring java ldap api 启用用户
LDAP - cannot enable user using spring java ldap api
正在尝试启用用户帐户并出现以下错误。如果我在创建用户(使用 java api)后直接转到 windows 机器并更新密码(在 windows 机器上手动使用 UI),例如 "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=Users,OU=MyCity,OU=企业支持 {mail=adsadsa51@test.com, Description=Test account, 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=史密斯, 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 更新密码属性。
您能否更具体地说明这意味着什么?
正在尝试启用用户帐户并出现以下错误。如果我在创建用户(使用 java api)后直接转到 windows 机器并更新密码(在 windows 机器上手动使用 UI),例如 "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=Users,OU=MyCity,OU=企业支持 {mail=adsadsa51@test.com, Description=Test account, 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=史密斯, 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 更新密码属性。
您能否更具体地说明这意味着什么?