这是我想要实现的目标: 我有一个嵌套的OU结构,大约有5个级别。
OU=Portal,OU=Dev,OU=Apps,OU=Grps,OU=Admin,DC=test,DC=com
我试图找出用户是否在OU = Portal上有权限/存在。
以下是我目前所拥有的片段:
PrincipalContext domain = new PrincipalContext(
ContextType.Domain,
"test.com",
"OU=Portal,OU=Dev,OU=Apps,OU=Grps,OU=Admin,DC=test,DC=com");
UserPrincipal user = UserPrincipal.FindByIdentity(domain, myusername);
PrincipalSearchResult<Principal> group = user.GetAuthorizationGroups();
由于某些未知原因,从上面的代码生成的值user
始终为null。但是,如果我按如下方式删除所有OU:
PrincipalContext domain = new PrincipalContext(
ContextType.Domain,
"test.com",
"DC=test,DC=com");
UserPrincipal user = UserPrincipal.FindByIdentity(domain, myusername);
PrincipalSearchResult<Principal> group = user.GetAuthorizationGroups();
这样可以正常工作并返回正确的用户。我只是想减少结果的数量,而不是从AD获得所有内容。
我做错了什么吗?我用谷歌搜索了几个小时,测试了各种组合而没有太多运气。
答案 0 :(得分:2)
好吧,如果
UserPrincipal.FindByIdentity(context, identityType, username) == null
然后找不到用户,在您的情况下可能是,因为用户未在OU中定义=您在上下文中设置为容器。
答案 1 :(得分:1)
经过多次探索,实验,谷歌搜索和搜索堆栈溢出;似乎.NET没有内置方法来“读取”具有对包含用户作为其成员的外部组的引用的特定OU。不幸的是,建议和推荐的解决方案是在域级检索并执行某种形式的自定义过滤。
答案 2 :(得分:0)
您在OU=Portal,OU=Dev,OU=Apps,OU=Grps,OU=Admin,DC=test,DC=com
内寻找的用户?
第二次搜索后,user
对象的外观如何?什么是DistinguishedName
属性?
您在第一个示例中的搜索将仅搜索该子子子OU(您拥有的OU=Portal, ....
)内的对象。
如果您的用户存在于某个其他OU中,则您必须从域的顶部进行搜索 - 或者在用户实际存在的OU内(或其任何父级)进行搜索。
答案 3 :(得分:0)
用户不存在,或者您不会返回null。
你的最终比赛是什么?你是什么意思:
我试图找出用户是否有权限 OU =门户。
您在寻找什么类型的权限?行政代表团?
答案 4 :(得分:0)
希望这有一些帮助,我在尝试从嵌套的OU中检索组时遇到了同样的问题。 ou的结构是组&gt; WebGroups。所以我写了以下内容......
var ctx = new PrincipalContext(ContextType.Domain, "domain", "OU=Groups,OU=WebGroups,DC=domain,DC=ie", "username", "password")
证明订单很重要,WebGroups必须先行。当我将其更改为以下代码时,我的代码工作了......
var ctx = new PrincipalContext(ContextType.Domain, "domain", "OU=WebGroups,OU=Groups,DC=domain,DC=ie", "username", "password")
所以我假设你必须写“OU = Admin,OU = Groups ... OU = Portal”才能让你的工作。