忘记密码

时间:2012-07-26 20:13:34

标签: c# asp.net active-directory forgot-password

我正在尝试使用System.Web.Security API创建一个基于问题/答案重置密码的Web应用程序。

我得到一个例外:

  

DirectoryServicesCOMException(0x8007202f):违反约束   发生了“如果用户对问题提供了一个错误的答案。

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

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

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

谢谢。

1 个答案:

答案 0 :(得分:1)

我猜你在使用ASP.NET?我对它没有任何经验,也没有一般的.NET经验(我还在自学),但这是一个非常有用的链接,提供各种Active Directory API的示例({{3} })。包括重置用户密码。如果您不确定如何设置它(link),这是指向DirectoryEntry类的链接。另外,浏览link非常非常有帮助(namespace documentation)。可能我唯一喜欢微软的是他们的好文档。

我通常做这样的事情(在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. 哦,你的账户锁定门槛很高。我建议3-5,取决于你的用户的能力。