8

我试图在 Active Directory 中按用户名查找用户。

这有效:

const string Domain = "SLO1.Foo.Bar.biz";
const string Username = "sanderso";

PrincipalContext principalContext = new PrincipalContext(ContextType.Domain, Domain);
UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(principalContext,  Username);

这不会:

const string Domain = "SLO1.Foo.Bar.biz";
const string Container = "CN=Users,DC=SLO1,DC=Foo,DC=Bar,DC=biz";
const string Username = "sanderso";

PrincipalContext principalContext = new PrincipalContext(ContextType.Domain, Domain, Container);
UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(principalContext, Username);

我收到错误消息:

服务器上没有这样的对象。

这是我的 ActiveDirectory 设置的屏幕截图:

在此处输入图像描述

我也尝试过使用以下容器:

const string Container = "OU=Users,DC=SLO1,DC=Foo,DC=Bar,DC=biz";

这同样不成功。

如何在访问“用户”容器时指定我的容器?在引入具有更复杂要求的查找之前,我试图将其作为初始的简单设置。所以,我宁愿不满足于简单的解决方案,因为无论如何我都必须解决这个问题,我相信。

4

1 回答 1

9

我想到了 :)

首先,我使用以下软件来确保生成正确的容器字符串:

http://www.ldapbrowser.com/download.htm

这证实了我的字符串非常正确,除了缺少一个端口,但它只是需要一些大惊小怪。

正确的用法是:

const string Domain = "SLO1.Foo.Bar.biz:389";
const string Container = @"DC=Foo,DC=Bar,DC=biz";
const string Username = @"sanderso";
PrincipalContext principalContext = new PrincipalContext(ContextType.Domain, Domain, Container);
UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(principalContext,  username);
于 2013-01-07T23:56:52.737 回答