2012-07-26 129 views
0

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

我得到一个异常:

DirectoryServicesCOMException(0x8007202f):一个约束冲突 发生”,如果用户提供一个不好回答的问题

如果我重置的attributeMapFailedPasswordAnswerCount值不设置该帐户再次变为活动状态

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

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

谢谢。

+0

基于安全问题重置AD密码的Web服务?听起来像一个非常糟糕的主意......无论如何,没有代码的情况下,这种例外是无用的。如果您发布抛出此异常的代码,则更有可能有人可以帮助您。 – Ran 2012-07-26 21:22:04

+0

谢谢你给我关于潜在安全警告的建议。我计划将它扩展到手机并在私人电子邮件上发送密码重置。但现在我不得不提出这个网络服务。 – user984201 2012-07-27 11:44:23

+0

问题是,当映射到attributeMapFailedPasswordAnswerCount这个字段的when属性被设置为异常时,所有具有AD功能都会抛出,包括登录,更改密码或更改安全问题/答案。 – user984201 2012-07-27 11:47:37

回答

1

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

我平时做这样的事情(在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. 只有在运行此帐户的帐户无权更改用户时,才需要此密码和密码。我上unprivelaged帐户运行这些,所以我必须在脚本中包含我的管理员凭据(别担心,他们没有硬编码)

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

+0

接受,否认,但请不要忽视。 – Logan 2012-07-30 16:07:59

+0

谢谢,先生! :) – Logan 2012-07-30 16:28:59

+0

谢谢你帮我解答,我能弄清楚更多的细节。添加更多帮助我的东西。我用来映射到属性的变量,其中一些是系统变量,无法使用。 希望这可能对某人有用。 我检查的第二件事是我搜索了本地安全策略,并查看了帐户策略和帐户锁定策略。它应该为所有三个变量定义值。 无论如何,感谢您的帮助,并在答复中付出如此多的努力,我真的很感激。 – user984201 2012-07-30 16:29:15