簡體   English   中英

在ASP.NET中訪問Active Directory?

[英]Accessing Active Directory in ASP.NET?

我使用控制台應用程序編寫一些測試代碼:

    /// <summary>
    /// Returns AD information for a specified userID.
    /// </summary>
    /// <param name="ntID"></param>
    /// <returns></returns>
    public ADUser GetUser(string ntID)
    {            
        DirectorySearcher search = new DirectorySearcher();         
        search.Filter = String.Format("(cn={0})", ntID);

        search.PropertiesToLoad.Add("mail");
        search.PropertiesToLoad.Add("givenName");
        search.PropertiesToLoad.Add("sn");
        search.PropertiesToLoad.Add("displayName");
        search.PropertiesToLoad.Add("userPrincipalName");            
        search.PropertiesToLoad.Add("cn");

        SearchResult result = search.FindOne();

        return new ADUser(result);
    }

這在控制台應用程序中運行良好。 但是,當我將其移動到ASP.NET應用程序時,我收到一條錯誤消息,指出不知道正確的域。

在ASPNET帳戶上運行時,是否存在訪問AD的技巧?

編輯 :只傳遞LDAP://域連接字符串是不夠的,因為它需要一個實際的登錄/密碼。 因為它運行在計算機上的本地帳戶上,所以我不確定要使用哪個AD L / P. 我可以以某種方式將訪問用戶帳戶委托給它嗎?

編輯#2 :當嘗試使用身份模擬時,我得到一個DirectoryServicesCOMException:

身份驗證機制未知。

是。 你需要給它一個目錄連接字符串。 控制台應用程序(以您的身份運行)使用您的憑據運行,包括目錄訪問。 ASP.NET應用程序使用ASPNET用戶的憑據運行,這些憑據是運行應用程序的系統的本地憑據,而不是目錄全局的憑據。

或者,您可以在web.config中指定identity impersonate = true,並且對Active Directory的請求將作為調用用戶而不是Machine \\ ASPNET發送

編輯:如果您收到身份驗證錯誤,請參閱PIPTHEGEEK的帖子,您將不得不信任您的Web服務器以進行委派,但請注意信任委派(因為它會為安全類型打開另一個蠕蟲病毒)。 您必須允許Web服務器將當前用戶的憑據傳遞給AD。

如果可能,請轉到計算機的AD屬性,選擇委派選項卡,然后選擇“信任此計算機以委派任何服務(僅限Kerberos)

看看是否有效。 如果是這樣,您可以使用指出的第三個選項進一步細化權限

“相信這台計算機只能委托給指定的服務”

然后選擇“僅使用Kerberos”

並在“此帳戶可以向其提供委派憑據的服務”中,添加相關的服務信息。

如果它是使用Windows身份驗證的Intranet應用程序,則可以將AD調用包裝在用戶的模擬上下文中。

就像是:

using (((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate())
{
    // Do your AD stuff here
}

最簡單的方法是使您的Web應用程序池作為具有所需訪問權限的域帳戶運行。 這可以避免您必須管理密碼的安全存儲。 不要忘記使該帳戶成為IIS_WPG本地組的成員。 如果您決定使用模擬,則必須配置Kerberos委派以及將ASP.NET配置更改為模擬。 這將涉及使應用程序池作為域帳戶運行,授予該域帳戶對委派憑據的權限(AD用戶和計算機MMC中帳戶屬性的委派選項卡)。 然后確保將網站設置為在元數據庫中使用negoiate(這是IIS6上的默認設置,不確定其他版本)並為新域帳戶注冊SPN。

編輯:您的“未知身份驗證”錯誤聽起來像是錯誤配置的委派。 檢查您的應用程序池正在運行的帳戶是否受委托信任,該IIS設置為僅使用Windows身份驗證,並且為應用程序池標識帳戶注冊了有效的SPN。

您也可以嘗試在登錄中包含域名

adSharepointUsers = new DirectoryEntry("LDAP://MyDomain","MyDomain/ADUser","password");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM