我正在研究一个基于web的"忘记密码"重置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会工作吗?
任何帮助都是感激的!
试试这个,我在一个轻量级目录服务的AD实现上经历了这个。
为。net 2.0上的活动目录轻量级目录服务(ad lds)设置密码
基本上你必须先创建条目,然后设置密码。
重置密码PwdLastSet是关键属性。如果PwdLastSet的值被设置为零,那么用户在再次登录时必须更改密码(见文章)。
你的侧边问题:
创建Active-Directory新用户。
在目标组织单元中,或者直接在域容器上,您只需要将重置密码的权限委托给新用户。所以你的应用程序只操作用户和密码只允许重置密码
在AD中创建组,创建用户,将密码更改选项委托给组,通常在OU级别完成。这是大多数组织在拥有帮助台功能时的做法。
http://www.windowsecurity.com/articles/Implementing-Active-Directory-Delegation-Administration.html