我正在使用基于网络的“忘记密码”来重置AD密码,使用LDAP。好吧,我可以解锁用户,但不能更改密码。
这是我的功能:
Private Function ChangeLocalUserPassword(ByVal User As String, ByVal Pass As String) As Boolean
Dim pinger As New Net.NetworkInformation.Ping
Dim usr As DirectoryEntry
_de = GetDirectoryEntry()
If _de Is Nothing Then
'couldn't connect or find account
MsgBox("_de is Nothing")
Return False
End If
Try
usr = _de.Children.Find("CN=" & User, "User")
Catch ex As Exception
MsgBox("User could not be found!")
Return False
End Try
Try
usr.Invoke("SetPassword", Pass)
usr.CommitChanges()
usr.Properties("LockOutTime").Value = 0
usr.CommitChanges()
Catch ex As Exception
MsgBox("Error is " & ex.Message)
Return False
End Try
End Function
这是我的GetDirectoryEntry功能:
Private Function GetDirectoryEntry() As DirectoryEntry
Dim dirEntry As DirectoryEntry = New DirectoryEntry()
dirEntry.Path = "LDAP://<SERVER>/ou=<OU>,dc=<DOMAIN>"
dirEntry.Username = "<DOMAIN>\Administrator"
dirEntry.Password = "<PASSWORD>"
Return dirEntry
End Function
一个附带问题 - 任何人都建议我,如何在页面上对管理员用户进行硬编码?是否可以创建具有少数管理员权限的IUSR?
任何帮助表示赞赏!
答案 0 :(得分:0)
试试这个,我在AD的轻量级目录服务实现上完成了这个。
Set password for active directory lightweight directory services (ad lds) on .net 2.0
基本上你必须先创建条目然后设置密码。
答案 1 :(得分:0)
重置密码PwdLastSet是关键属性。如果PwdLastSet的值设置为零,则用户在登录agin(see article)时必须更改其密码。
对于你的问题:
在Active-Directory中创建新用户。
在目标组织单位中,或直接在域容器中,您只需将重置密码的权限委派给新用户。因此,您的应用程序只操作一个允许重置密码的用户和密码。
答案 2 :(得分:0)
在AD中创建一个组,创建一个用户,将密码更改选项委派给该组,通常在OU级别完成。这是大多数组织在具有帮助台功能时执行此操作的方式 http://www.windowsecurity.com/articles/Implementing-Active-Directory-Delegation-Administration.html