2010-03-05 74 views
1

我想重新使用Windows身份驗證來綁定到Active Directory用戶並檢查組成員資格。用於Active Directory用戶綁定的No Environ(「密碼」)?

我可以得到Windows用戶名爲Environ("username"),但是如何獲取密碼?我不想要求用戶重新輸入密碼,但沒有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 

回答

2

是什麼讓你如此確信密碼是在任何地方讀取第一個地方?

保持密碼的可接受方式是僅存儲密碼的單向散列(通常使用BCrypt散列算法加上salt/nonce),並且當有人登錄時,對嘗試的密碼使用相同的散列技術看看它是否符合你的儲值。而不是像password1(警告:錯誤的密碼示例!)那樣存儲可讀的東西,而最終存儲的東西更像23e598ac098da42==,這對餅乾來說不太有用。

這就是爲什麼如果你失去了一個密碼,大多數系統都要求你重置它,而不是爲你恢復舊的一個—他們甚至沒有一個真正的舊副本給你。

+0

我需要密碼才能綁定到用戶對象,所以我想我將不得不在用戶啓動應用程序時再次詢問用戶密碼,儘管它與登錄Windows時使用的密碼相同。感謝Joel的反饋。 – Kuyenda 2010-03-05 18:32:15

+1

@Kuy - 你應該能夠在不重新提交用戶名和密碼的情況下檢查Active Directory。一個你登錄到窗口,它知道你是誰。 – 2010-03-05 18:44:55

+0

喬爾,你是對的。 objConnection不需要用戶名和密碼,但OpenDSObject可以。是否有另一種方法綁定到用戶對象而不需要用戶名和密碼?再次感謝! – Kuyenda 2010-03-05 18:56:01

相關問題