我想重复使用Windows身份验证绑定到Active Directory用户并检查组成员身份。
我可以使用Environ("username")
获取Windows用户名,但如何获取密码?我不想要求用户重新输入密码,但没有Environ("password")
。
如何使此代码生效?
谢谢!
Private Sub ADsAuthenticate()
Dim objConnection As New ADODB.Connection
Dim objRecordset As ADODB.Recordset
Dim objADsUser As IADsUser
Dim objADsGroup As IADsGroup
Dim strUsername As String
Dim strPassword As String
strUsername = Environ("username")
strPassword = Environ("password")
With objConnection
.Provider = "ADsDSOObject"
.Properties("User ID") = strUsername
.Properties("Password") = strPassword
.Properties("Encrypt Password") = True
.Open "ADs Provider"
Set objRecordset = .Execute("<LDAP://<server>/dc=<domain>,dc=com>;" _
& "(sAMAccountName=" & strUsername & ");ADsPath;Subtree")
End With
With objRecordset
If Not .EOF Then
Set objADsUser = GetObject("LDAP:").OpenDSObject(.Fields("ADsPath").Value, strUsername, strPassword, ADS_SECURE_AUTHENTICATION)
Debug.Print objADsUser.ADsPath
For Each objADsGroup In objADsUser.Groups
Debug.Print objADsGroup.Name
Next
End If
End With
objConnection.Close
End Sub
答案 0 :(得分:2)
是什么让您确信密码可以在任何地方首先阅读?
保留密码的可接受方法是仅存储密码的单向散列(通常使用BCrypt散列算法加上salt / nonce),并且当有人登录时使用相同的散列技术对尝试的密码进行查看如果它与您的存储值匹配。而不是存储诸如password1
之类的可读内容(警告:错误的密码示例!),最终存储的内容更像23e598ac098da42==
,对于破解者来说更有用。
这就是为什么如果你丢失了密码,大多数系统都要求你重置密码而不是为你恢复旧密码 - 他们甚至没有真正的旧密码副本给你。