2010-09-08 74 views
1

的作品在我的工作我必須處理2個不同的域x.com(父目錄)和它的子域yxcomActive Directory查找但是局部

父域(x.com)擁有所有的活動目錄用戶,計算機等。從位於x.com域中的本地工作站,我可以閱讀活動目錄用戶的電子郵件。

服務器位於域y.x.com中x的子域。在服務器上,活動目錄讀取失敗,並且電子郵件地址未從活動目錄中讀取。

除此之外,我嘗試從位於y.x.com域(與服務器相同)中的虛擬機執行相同的代碼,但令我驚訝的是這起作用。

我使用的目錄服務在.NET中做到這一點,我的代碼如下:

string userEmail = string.Empty; 

try 
{ 
accountName = accountName.Replace(ConfigurationManager.AppSettings["DomainName"].ToString(), ""); 

DirectorySearcher ds = new DirectorySearcher() 
{ 
    SearchRoot = new DirectoryEntry() 
    { 
    Path = ConfigurationManager.AppSettings["DirectoryPath"].ToString(), 
    AuthenticationType = AuthenticationTypes.Secure 
    } 
}; 

ds.Filter = "(SAMAccountName=" + accountName + ")"; 
ds.PropertiesToLoad.Add(ConfigurationManager.AppSettings["ADMailPropertyName"].ToString()); 

SearchResult result = ds.FindOne(); 

if (result != null) 
{ 
    userEmail = result.Properties[ConfigurationManager.AppSettings["ADMailPropertyName"].ToString()][0].ToString(); 
} 
} 
catch (Exception e) 
{ 
//Log error 
} 

return userEmail; 

任何幫助,將不勝感激。

+1

是否有錯誤訊息?如果是這樣,請將其添加到您的問題(使用編輯鏈接)。 – Greg 2010-09-08 17:22:06

回答

2

程序在服務器上運行的用戶帳戶是否具有對Active Directory的必要權限?

+0

是的,我們正在使用模擬和Windows身份驗證。所以登錄的用戶在服務器上模擬。在這種情況下,它是我,我能夠驗證這一點,因爲服務器上的Page.User.Identity.Name給了我的帳戶。 – 2010-09-08 19:50:42

1

格雷格答案的評論指出,您使用1)模擬和2)Windows身份驗證。這意味着你的服務器知道你是誰,並冒充你。

但是...您的服務器無法將這些憑據委託給遠程服務器(x.com域服務器)。這是一個潛在的安全漏洞,如果可能的話,允許網站將您的憑證轉發給任何第三方。

一個解決方案是使用kerberos身份驗證並啓用您的服務器進行委派。我從來沒有這樣做過,所以無法真正幫你解決細節問題。

你可以在The Double-Hop Problem瞭解更多關於它的信息。