2010-09-08 69 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了解更多关于它的信息。