我猜你正在使用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()
注:
如果這個不斷返回多個結果,你有問題。
只有在運行此帳戶的帳戶無權更改用戶時,才需要此密碼和密碼。我上unprivelaged帳戶運行這些,所以我必須在腳本中包含我的管理員憑據(別擔心,他們沒有硬編碼)
哦,你的帳戶鎖定閾值是相當高的。我建議3-5,取決於你的用戶的才能。
基於安全問題重置AD密碼的Web服務?聽起來像一個非常糟糕的主意......無論如何,沒有代碼的情況下,這種例外是無用的。如果您發佈拋出此異常的代碼,則更有可能有人可以幫助您。 – Ran 2012-07-26 21:22:04
謝謝你給我關於潛在安全警告的建議。我計劃將它擴展到手機並在私人電子郵件上發送密碼重置。但現在我不得不提出這個網絡服務。 – user984201 2012-07-27 11:44:23
問題是,當映射到attributeMapFailedPasswordAnswerCount這個字段的when屬性被設置爲異常時,所有具有AD功能都會拋出,包括登錄,更改密碼或更改安全問題/答案。 – user984201 2012-07-27 11:47:37