2010-08-22 77 views
2

我嘗試使用Mono中的Novell.Directory.Ldap庫將用戶身份驗證到活動目錄。我知道有比下面更好的方法,但鑑於我只限於單聲道,這些是我所能看到的唯一支持的例程。活動目錄和LDAP庫

使用.NET庫,我可以使用samAccountName對用戶進行身份驗證。

using (DirectoryEntry de = new DirectoryEntry()) 
       { 
        de.Username = username; 
        de.Password = password; 
        de.Path = string.Format("LDAP://{0}/{1}", ADHostname, DefaultNamingContext); 
        de.AuthenticationType = AuthenticationTypes.Secure; 

        using (DirectorySearcher deSearch = new DirectorySearcher()) 
        { 
         deSearch.SearchRoot = de; 
         deSearch.PropertiesToLoad.Add("cn"); 
         deSearch.Filter = "(&(objectCatagory=person))"; 

         deSearch.FindOne(); 
        } 
       } 

但是,如果它在單聲道內運行,則無效憑證將失敗。使其工作的唯一方法是通過指定用戶名的UPN:

de.Username =「[email protected]」;

問題是,UPN不是AD的必需屬性。那麼,我如何才能用他們的用戶名來驗證用戶呢?

我看到一個關於一個POST方式做到這一點:Authenticating user using LDAP from PHP

但是,這是一個雞和蛋的問題。如何綁定搜索用戶DN,以便我可以綁定,如果我無法綁定爲經過身份驗證的用戶開始。

謝謝你給予的任何幫助。

回答

0

通常您會爲您的應用程序獲取一個帳戶以允許搜索其他用戶DN。傳統上這是使用匿名綁定完成的,但現在通常因安全原因而被阻止。

因此得到一個已知的DN和密碼的服務帳戶。綁定爲該服務帳戶,執行搜索,然後綁定爲通過搜索找到的用戶DN。

+0

這很有道理。我試圖用盡可能少的管理員參與來做到這一點,但我認爲要求服務帳戶的完整DN不是什麼大問題。謝謝。 – 2010-08-22 23:57:45