更改Active Directory密码

时间:2011-10-06 12:02:15

标签: c# active-directory passwords

首先,请原谅我的英语,这不是我的母语。

我正在开发一个管理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();

不同的方式,同样的问题。

只有在用户尝试编辑自己的密码时才会失败。

任何帮助都会感激不尽。

4 个答案:

答案 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的默认权限,只有管理员和帐户操作员可以重置密码。