正如标题所暗示的,我在设置用户密码时遇到了关于尊重密码策略的问题,特别是密码历史限制。
该场景是用户密码重置,当用户不知道其当前密码时。我正在使用以下方法来完成此操作:
using (PrincipalContext context = new PrincipalContext(ContextType.Domain, "XXXX", "ADMINUSER", "ADMINPASSWORD")) {
using (UserPrincipal user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, username)) {
user.SetPassword(password);
}
}
Run Code Online (Sandbox Code Playgroud)
这适用于每项策略减去密码历史限制。
现在考虑这个场景,当用户想要更改他们的密码并且知道他们当前使用的密码时:
using (PrincipalContext context = new PrincipalContext(ContextType.Domain, "XXXX.XXX.com")) {
using (UserPrincipal user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, username)) {
user.ChangePassword(currentPassword, newPassword);
}
}
Run Code Online (Sandbox Code Playgroud)
...按预期工作,并根据所有密码策略限制进行验证。
有没有人处理过这个问题?
干杯:)
我们的用户存储是名为eDirectory的LDAP服务器.如何使用System.DirectoryServices.Protocols更改用户密码?
我尝试为Server 2012中的更新域用户密码编写C#代码。我根据此堆栈溢出答案使用以下代码
using (var context = new PrincipalContext(ContextType.Domain, "test.com"))
{
using (var user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, userName))
{
user.SetPassword(newPassword);
//user.ChangePassword(oldPassword, newPassword);
user.Save();
}
}
Run Code Online (Sandbox Code Playgroud)
运行代码时获取以下异常
System.Reflection.TargetInvocationException:调用的目标引发了异常。--->
System.UnauthorizedAccessException:访问被拒绝。(来自HRESULT的异常:0x80070005(E_ACCESSDENIED))
我也禁用了密码策略。有什么建议吗?