2013-01-16 42 views
3

我想在.NET中用LDAP製作一個簡單的身份驗證系統。 我正在檢查.NET中的一些命名空間,並簡單地製作如下的標準代碼片段。如何在LDAP中進行身份驗證?

DirectoryEntry de = new DirectoryEntry(path,username,password); 

DirectorySearcher s = new DirectorySearcher(de); 
s.Filter = "(&(cn=" + username2 + "))"; 

SearchResult result = s.FindOne(); 
if (result != null) { 
    Console.WriteLine("User exists"); 
} else { 
    Console.WriteLine("User does not exist"); 
} 

我有一個管理員用戶名和密碼,usernamepassword,我用它來驗證客戶端應用程序。我有一個需要在LDAP進行檢查登錄第二個用戶名和密碼,username2password2

username是管理員帳戶和username2只是在LDAP用戶的。那麼如何檢查username2的密碼?

+0

類似:http://stackoverflow.com/questions/400872/active-directory-check-username-password 我喜歡創建第二個目錄的解決方案輸入用戶名2和用戶通行證2,然後嘗試訪問其中的內容,並捕獲異常以確定它是否無效 – Brandon

+0

@Brandon感謝您的回覆。但是當我做類似的想法時,irectoryEntry de1 = new DirectoryEntry(path,username2,password2);我收到了無效的用戶名和密碼錯誤。 – Arda

回答

1

稍微向後(和笨重)的方法是登錄爲用戶,並試圖找回的東西,然後把一個異常的無效的密碼:

static bool CheckUser(string userName, string password) 
{ 
    var adSettings = ConfigurationManager.ConnectionStrings["ActiveDirectory"]; 
    if (adSettings == null || 
     string.IsNullOrWhiteSpace(adSettings.ConnectionString)) 
    { 
     return false; 
    } 

    try 
    { 
     using (var de = new DirectoryEntry(adSettings.ConnectionString, userName, password)) 
     { 
      // This should throw an exception if the password is wrong 
      object nativeObject = de.NativeObject; 
     } 
    } 
    catch (DirectoryServicesCOMException) 
    { 
     // Wrong password 
     return false; 
    } 
    catch (System.Runtime.InteropServices.COMException) 
    { 
     // Can't connect 
     return false; 
    } 

    return true; 
} 
+0

非常感謝您的回覆,但是這也是無效的...用戶名只存在於LDAP中,而不是在計算機中。 – Arda

+0

@Arda我想我有點困惑 - 我以爲你有第二個用戶的名字和密碼,並想驗證他們,這是不正確的?您想以管理員身份登錄後獲取第二個用戶的密碼嗎? – Keith

+0

@Arda如果是這種情況(你想讀取密碼),那麼LDAP無法幫助你 - 它將驗證用戶的密碼,但它不應該以純文本給你該用戶的密碼(它不應該給你甚至以純文本形式存儲它們)。 – Keith

0

我在VB一些東西,可以幫助你我想。幾天前我正在與我的同事一起工作。不要讓我知道--- 代碼:

Dim cookie As HttpCookie = New HttpCookie("username") 
    cookie.Value = TextBox1.Text 
    cookie.Expires = DateAndTime.Now.AddHours(12) 
    Response.Cookies.Add(cookie) 
    Dim entry As New DirectoryEntry("LDAP://xyz.com/dc=xyz,dc=com", TextBox1.Text, TextBox2.Text) 
    Try 
     Dim obj As New Object 
     obj = entry.NativeObject 
     Dim search As New DirectorySearcher(entry) 
     search.Filter = "(SAMAccountName=" + TextBox1.Text + ")" 
     search.PropertiesToLoad.Add("cn") 
     Dim result As SearchResult 
     result = search.FindOne() 
     If result.Equals(Nothing) then 
      MsgBox("Try Again with valid username") 
     Else 
      MsgBox("User Found!") 
     Response.Redirect("~/Dashboard.aspx") 
     End If 
    Catch ex As Exception 
     MsgBox(ex.ToString) 
    End Try 

End Sub