当用户必须重置密码时,用户如何在 Active Directory 中更改其密码

问题描述 投票:0回答:1

我使用unboundid ldap sdk库。我想更改 Active Directory LDAP 服务器中的用户密码。问题是用户必须重置密码,因此绑定会抛出 773 代码的异常。

我在this文档中读到有两种方法可以更改密码。第一种方法是执行包含删除和添加操作的修改请求。这种方式需要旧密码,我想使用这种方式。第二种方法是执行包含替换操作的修改请求。这种方式不需要旧密码,但需要用户绑定。这意味着必须使用其他用户(管理员用户),因为我的用户无法绑定,因为我的用户必须重置其密码并且绑定会抛出异常。我不想使用这种方式,因为我不想使用任何其他用户。密码必须以两种方式正确编码。 我开发了以下代码:

LDAPConnection connection=...
final byte[] oldQuotedPasswordBytes = endoceValue( aOldPassword );
final byte[] newQuotedPasswordBytes = endoceValue( aNewPassword );
final Modification modificationDel = new Modification( ModificationType.DELETE, "unicodePwd", oldQuotedPasswordBytes );
final Modification modificationAdd = new Modification( ModificationType.ADD, "unicodePwd", newQuotedPasswordBytes );
    
ModifyRequest modifyRequest = new ModifyRequest(aUserDn, modificationDel, modificationAdd);
   connection.modify( aUserDn, modificationDel, modificationAdd );


private byte[] endoceValue( char[] aNewPassword )
{
   final String quotedPassword = '"' + new String( aNewPassword ) + '"';
   return quotedPassword.getBytes( StandardCharsets.UTF_16LE );
}

不幸的是这段代码抛出异常:

0000052D:DSID-03190FC9,问题 1005(CONSTRAINT_ATT_TYPE),数据 0, Att 9005a(unicodePwd)

我不明白这个异常。我认为密码(旧的和新的)已正确编码,因为我测试了文档中描述的替换密码的第二种方法。我测试了两种情况,绑定管理员用户和绑定我的不需要重置密码的用户。在这两种情况下都可以正常工作。

LDAPConnection connection=...
//bind admin or bind my user that does not need to reset password
final byte[] quotedPasswordBytes = endoceValue(aNewPassword);
final Modification modification = new Modification( ModificationType.REPLACE,"unicodePwd", quotedPasswordBytes );
connection.modify( aUserDn, modification );

此代码可以正常工作并更改用户的密码。此解决方案需要一些管理员用户,我不想使用此解决方案。我希望该用户可以自己重置密码。这意味着我必须使用第一种方式。怎么办?

java active-directory unboundid-ldap-sdk
1个回答
0
投票

我知道为什么它不起作用。 0000052D 十进制为 1325。

Windows调试系统错误代码: https://learn.microsoft.com/pl-pl/windows/win32/debug/system-error-codes?redirectedfrom=MSDN

1325错误: https://learn.microsoft.com/pl-pl/windows/win32/debug/system-error-codes--1300-1699-?redirectedfrom=MSDN

错误_密码_限制

1325(0x52D)

无法更新密码。为新密码提供的值 不符合长度、复杂性或历史要求 域名。

我使用了其他密码并且有效。

© www.soinside.com 2019 - 2024. All rights reserved.