我正在编写 c# 代码以由用户本人或管理员更改 ldap 用户的密码。我可以成功地对用户进行身份验证。但是,当我尝试调用ChangePassword
orSetPassword
行为时收到以下错误消息:
InnerException:在缓存中找不到目录属性。
我的代码如下:
LDAPPath = "LDAP://10.29.0.1:50405/DC=DCServerName,DC=local"
LDAPAdminDN = "CN=useradmin,OU=SystemAccounts,DC=DCServerName,DC=local"
LDAPAdminPwd = "S8kf5t3!"
username = "user1"
password = "oldPassword1"
npassword = "newPassword1"
DirectoryEntry root = new DirectoryEntry(
LDAPPath,
LDAPAdminDN,
LDAPAdminPwd,
AuthenticationTypes.None
);
using (root)
{
DirectorySearcher searcher = new DirectorySearcher(root,
string.Format("(CN={0})", username)
);
var result = searcher.FindOne();
if (result != null)
{
var user = result.GetDirectoryEntry();
try
{
user.Invoke("ChangePassword", new object[] { password, npassword });
user.Properties["LockOutTime"].Value = 0;
//user.Invoke("SetPassword", new object[] { npassword });
user.CommitChanges();
}
catch (Exception e)
{
string innerMsg = e.InnerException.Message;
return false;
}
}
我想知道如何解决此问题以成功更改密码。感谢你们
更新: 我尝试了以下几个选项,但都不起作用:一:
int intPort = 50405;
user.Invoke("SetOption", new object[] { ADS_OPTION_PASSWORD_PORTNUMBER, intPort });
user.Invoke("SetOption", new object[] { ADS_OPTION_PASSWORD_METHOD, ADS_PASSWORD_ENCODE_CLEAR });
二:
user.UsePropertyCache = true;
他们都得到0x80072020的错误
我的 IT 人员启用了“在非 SSL 上更改密码”,我不确定 AD LDS 部分中的任何设置是否重要。
问题: 我是否有权使用管理员帐户以这种方式更改用户的密码,而不是使用任何模拟代码?