我正在尝试使用System.Web.Security
API创建一个基于问题/答案重置密码的Web应用程序。
我得到一个例外:
DirectoryServicesCOMException(0x8007202f):违反约束 发生了“如果用户对问题提供了一个错误的答案。
如果我将attributeMapFailedPasswordAnswerCount
的值重置为未设置帐户再次变为活动状态。
AD中的帐户锁定阈值设置为20次登录尝试。
我是AD知识的新手,如果有人能指导我如何解决这个问题,我将不胜感激。
谢谢。
答案 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()
注意:
如果这会返回多个结果,则会出现问题。
此密码仅在运行此帐户的帐户无权更改用户时才需要。我在一个不成熟的帐户上运行这些,所以我必须在脚本中包含我的管理员凭据(不用担心,它们不是硬编码的)
哦,你的账户锁定门槛很高。我建议3-5,取决于你的用户的能力。