【发布时间】:2015-03-17 08:37:12
【问题描述】:
我正在尝试让我的 SharePoint 2010 用户在应用程序页面 (.aspx) 上使用以下 C# 更改他们的 AD 密码:
using (HostingEnvironment.Impersonate())
{
ctx = new PrincipalContext(ContextType.Domain);
user = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, userName);
if (user != null)
{
user.ChangePassword(oldPw, newPw);
user.Save();
}
}
这在我的开发环境中运行良好。然而,在生产环境中,无论 gpmc 中设置的新密码和密码策略如何,我总是得到以下异常
System.DirectoryServices.AccountManagement.PasswordException: 密码不符合密码策略要求。检查 最小密码长度、密码复杂度和密码历史 要求。 (HRESULT 异常:0x800708C5)
我尝试过使用“旧”方法:
directoryEntry.Invoke("ChangePassword", oldPassword, newPassword);
directoryEntry.Commit();
但这给出了同样的例外。
这完全把我难住了——我能想到的唯一可能的原因是代码需要在 DC 的盒子上运行(因此它可以用于开发而不是生产)或者因为 SharePoint 的配置略有不同.
【问题讨论】:
-
你检查过sharepoint上的配置吗?可能是由于最低密码年龄吗? technet.microsoft.com/en-us/library/cc736605%28v=WS.10%29.aspx 有没有未定义的策略?
-
SharePoint 上有什么配置?我已将最小密码年龄设置为 0,因此可以随时更改密码。我还将记住密码的数量设置为0,并删除了密码要求以满足复杂性要求。
-
您是否记得在更改生产环境中的 gpedit 策略后运行 gpupdate ?在您运行 GPUpdate 之前,它们不会更新。
-
啊,不。我的印象是只有在使用 gpedit 时才需要 gpupdate,而不是 gpmc。
-
我已经运行了 gpupdate,所以这些更改应该已经生效,但我仍然遇到同样的异常。运行代码的服务器是否需要安装 Active Directory 管理中心功能?
标签: c# sharepoint-2010 active-directory .net-3.5