2009-11-10 56 views
3

系統規格:什麼是枚舉用戶的活動目錄所需的安全權限

  • 2007年InfoPath用C#代碼隱藏
  • WEBSERVICES
  • 的Active Directory

我需要得到用戶名稱(名字和姓氏)來自活動目錄,但用戶似乎沒有讀取活動目錄列表的權限。

什麼權限需要給用戶,以便他們能夠搜索廣告

我使用這樣的

SearchResult result; 
using (DirectoryEntry de = new DirectoryEntry("LDAP://DC=contoso,DC=com,DC=au")) 
{ 
    DirectorySearcher search = new DirectorySearcher(de, (string.Format("(&(objectClass=user)(mailNickname={0}))",this.Application.User.UserName))); 
    result = search.FindOne(); 
} 

代碼,我已經考慮創建一個Web服務是獲取所需的信息,但似乎是過度殺傷,但會避免必須確保表格的每個可能的用戶都必須擁有正確的權限

編輯:
我試圖執行的代碼是infopath代碼。表單本身連接到Web服務來檢索其中的一些數據。因此它屬於infopath的安全模型。該表格是完全可信的,因此在當前用戶環境下執行應該沒問題。
我沒有添加額外的細節。

回答

3

當您創建新的DirectoryEntry而未指定用戶名和密碼時,您將使用正在執行的用戶的憑據連接到Active Directory - 在您的情況下可能是Web服務器上的本地IUSR _...帳戶,它是在IIS中設置新網站時使用的默認帳戶。由於這是本地帳戶,您將無法訪問Active Directory。

你有兩個選擇:

  • 創建Active Directory和使用的服務帳戶帳號明確,即DirectoryEntry de = new DirectoryEntry("LDAP://DC=contoso,DC=com,DC=au", "sa-username", "sa-password", AuthenticationTypes.Secure)。當然,代碼中的明文密碼不是一個好主意,所以要找到加密密碼的方法。

  • 配置爲您的網站(IIS 6+)下一個域用戶帳戶來運行IIS應用程序池 - 這樣該帳戶連接到Active Directory時使用。
+0

@Per謝謝你。我可能能夠在信息結尾使用你的第一個選項。我已經編輯了這個問題,說在這一點上代碼在infopath結束時正在執行。將代碼調用AD轉換爲web服務是一個考慮因素,在這種情況下,您的第二個選項可能會發揮作用。 – 2009-11-18 21:46:50

1

AD的任何用戶都應具有默認瀏覽AD的權限。

你可能只需要改變你的目錄項指向用戶容器,像這樣:

new DirectoryEntry("LDAP://CN=users,DC=contoso,DC=com,DC=au") 

您的用戶容器可能是另一個名字。

如果這樣不能解決問題,則可能是應用程序實際上並未以用戶身份運行。例如,ASP.NET網站需要使用模擬才能查詢AD。

+0

問題可能來自信息安全模型。它基本上就像Internet Explorer一樣,它可以訪問的信息類型非常有限。是沙盒嗎? – 2009-11-10 05:58:07