首先,请原谅我的英语,这不是我的母语。
我正在开发一个管理Active Directory的网络平台。我可以创建,删除和编辑组,用户,OU等。
当连接的用户想要使用平台更改自己的密码时,它会失败。
它来自DirectoryEntry.Invoke
。
我使用了DirectoryServices.DirectoryEntry
:
directoryEntry.Invoke("SetPassword", password);
directoryEntry.Commit();
所以我尝试了System.DirectoryServices.AccountManagement:
PrincipalContext ctx = new PrincipalContext(ContextType.Machine);
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, Username);
user.SetPassword(password_);
user.Save();
不同的方式,同样的问题。
只有在用户尝试编辑自己的密码时才会失败。
任何帮助都会感激不尽。
答案 0 :(得分:2)
试试这段代码。它对我有用,
public void ChangeMyPassword(string domainName, string userName, string currentPassword, string newPassword)
{
try
{
string ldapPath = "LDAP://192.168.1.xx";
DirectoryEntry directionEntry = new DirectoryEntry(ldapPath, domainName + "\\" + userName, currentPassword);
if (directionEntry != null)
{
DirectorySearcher search = new DirectorySearcher(directionEntry);
search.Filter = "(SAMAccountName=" + userName + ")";
SearchResult result = search.FindOne();
if (result != null)
{
DirectoryEntry userEntry = result.GetDirectoryEntry();
if (userEntry != null)
{
userEntry.Invoke("ChangePassword", new object[] { currentPassword, newPassword });
userEntry.CommitChanges();
}
}
}
}
catch (Exception ex)
{
throw ex;
}
}
答案 1 :(得分:1)
正如Paolo所说,如果没有额外的权限,您将无法调用重置密码。要调用ChangePassword,您需要提供以下密码:
directoryEntry.Invoke("ChangePassword", oldPassword, newPassword);
directoryEntry.Commit();
答案 2 :(得分:0)
这是Windows限制:用户无法重置自己的密码,即更改密码而不提供旧密码。
您只能更改自己的密码,即提供旧密码和新密码
请尝试使用ChangePassword
方法。
答案 3 :(得分:0)
更改密码需要用户的旧密码才能设置新密码,重置密码权限需要重置密码的人。使用AD的默认权限,只有管理员和帐户操作员可以重置密码。