簡體   English   中英

僅在服務器上查詢Active Directory時出錯

[英]Getting Error Querying Active Directory On The Server Only

我有以下代碼塊,使用System.DirectoryServices.AccountManagement通過組名向Active Directory查詢用戶:

var domainContext = new PrincipalContext(ContextType.Domain, "company.container.internal");
var groupPrincipal = GroupPrincipal.FindByIdentity(domainContext, IdentityType.Name, "Lvl1Users");
if (groupPrincipal != null)
{
  //Read the values
}

現在,該網站使用以下內容:

  • Win2k8上的IIS7
  • Windows驗證
  • 假冒=真
  • 使用“網絡服務”作為帳戶的.NET 4.0上的應用程序池

在我的本地計算機上(您知道如何運行),一切都很好。 在本地嘗試的同行們也很好用。 但是,一旦部署到服務器,它將顯示以下內容:

發生操作錯誤。

我研究的所有內容都說這是權限問題。 需要注意的一件事是,在本地計算機上,我位於MainNetwork域上,該域是我正在查詢的company.container.internal域的父級。 IIS計算機位於company.container.internal並且正在查詢同一域。 坦白說,我認為更具挑戰性的情況是在本地計算機上讀取AD,該本地計算機位於其他域中,但是可以正常工作。 在查詢相同域的服務器上,它失敗。

這是我嘗試過的, 但沒有一個起作用:

  • 將AppPool更改為“ LocalSystem”
  • 更改AppPool以使用靜態超級管理員帳戶
  • 在代碼中使用模擬來與MainNetwork域上的admin用戶一起操縱本地塊中的調用上下文。
  • 在代碼中使用了模擬,以與company.container.internal域上的管理員用戶一起在本地塊中操縱調用的上下文。
  • using (HostingEnvironment.Impersonate())

這里有什么? 我嘗試在兩個域上模擬每種類型的電源管理員,並使用了多個AppPool設置,但我始終遇到相同的錯誤。 域聲明中是否需要更改代碼中的任何內容,或者我缺少權限問題?

我發現了這一點,結果發現使用HostingEnvironment.Impersonate()仍然是解決問題的根源。 我已經嘗試過了,但是我的代碼還有另一個問題。

問題常常是,進行Active Directory調用的上下文是在沒有權限的用戶下進行的(由於用戶令牌是一個事實,因此在ASP.NET中,如果identity impersonate="true"也會發生這種情況)通過以下網址對另一台服務器進行身份驗證時無法使用的“輔助令牌”: http : //bit.ly/1753RjA )。

下面的代碼將確保運行該代碼塊是在運行ASP.NET站點的AppPool (即NETWORKSERVICE )的上下文中運行的。

using (HostingEnvironment.Impersonate())
{
   var domainContext = new PrincipalContext(ContextType.Domain, "myDomain.com");
   var groupPrincipal = GroupPrincipal.FindByIdentity(domainContext, IdentityType.Name, "PowerUsers");
   if (groupPrincipal != null)
   {
      //code to get the infomation
   }

}

但是,一個非常重要的細節是, 所有調用Active Directory的代碼都必須在該塊中。 我曾經使用過我的一個團隊成員編寫的一些代碼,該代碼返回類型為Users (自定義類)的LINQ查詢結果,但未評估表達式(錯誤的做法)。 因此,返回了表達式樹而不是結果。

最終發生的是調用代碼最終評估了結果,並且仍然出現“ An operations error occurred消息。 我雖然上面的代碼修復不起作用。 實際上確實可以,但是有代碼在塊外評估結果。

簡而言之,請確保所有用於訪問Active Directory的代碼都在using塊的內部,並且應該修復將服務/應用程序部署到服務器的異常。

暫無
暫無

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

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