0

我正在尝试创建一个 Web 应用程序以使用System.Web.SecurityAPI 根据问题/答案重置密码。

我得到一个例外:

DirectoryServicesCOMException (0x8007202f):发生约束冲突”如果用户对问题提供了错误的答案。

如果我将值重置attributeMapFailedPasswordAnswerCount为未设置,则该帐户再次变为活动状态。

AD 中的帐户锁定阈值设置为 20 次登录尝试。

我是 AD 知识的新手,如果有人能指导我如何解决这个问题,我将不胜感激。

谢谢你。

4

1 回答 1

1

我猜你正在使用 ASP.NET?我真的没有任何经验,也没有太多的 .NET 经验(我仍在学习自己),但这是一个非常有用的链接,提供了各种 Active Directory API 的示例(链接)。包括重置用户密码。这是 DirectoryEntry 类的链接,如果您不确定如何设置它(链接)。另外,浏览命名空间文档是非常非常有帮助的(链接)。可能我唯一喜欢微软的就是他们的好文档。

我通常会这样做(在 IronPython 中,因此它不会直接转换为您可以使用的代码):

ou = System.DirectoryServices.DirectoryEntry("LDAP://ou=Users,dc=whatever,dc=something,dc=localetc")
search = System.DirectoryServices.DirectorySearcher(ou, "(samAccountName="+acc"+")", Array[str](["distinguishedName"]]))
result = search.FindAll() # note 1
if result.Count != 1:
    raise BadError
else:
    ent = System.DirectoryServices.DirectoryEntry(result[0].Properties["distinguishedName"][0])
    ent.Username = admin # note 2
    ent.Password = pwd
    ent.Invoke("SetPassword", Array[object](["newpassword!"]))
    ent.Properties["LockOutTime"].Value = 0
    ent.CommitChanges()

笔记:

  1. 如果这会返回多个结果,那么您就会遇到问题。

  2. 仅当运行此的帐户无权更改用户时,才需要此和密码。我在一个非私有帐户上运行这些,所以我必须在脚本中包含我的管理员凭据(不用担心,它们不是硬编码的)

哦,你的帐户锁定阈值相当高。我会建议 3-5,这取决于您的用户的能力。

于 2012-07-27T15:59:36.907 回答