Principal.IsInRole(“AD组名称”)始终返回false,不抛出任何异常

时间:2018-02-08 18:56:33

标签: c# asp.net-mvc asp.net-web-api

在Web API控制器中,我需要使用包含来自另一个林中多个域的成员的AD组来确定角色成员身份。

GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, roleName); if (group != null) { foreach (Principal p in group.GetMembers()) { if (p != null && currentUserPrincipal.UserPrincipalName == p.UserPrincipalName) { roles.Add(roleName); break; } } }

返回false,没有找到错误的迹象。但上面的代码可以与其他AD组一起使用。然后,我修改了代码以循环访问相关组并收到异常。

{{1}}
  

指定的目录服务属性或值不存在。

我确定在特定域中的组成员上抛出了异常。我删除了所说的个人和正常执行的代码。我在第一个域中添加了另一个帐户,并返回了错误。

1 个答案:

答案 0 :(得分:0)

搜索给定的错误消息我找到了以下SO question and answer。最佳答案说明。

  

PrincipalContext类中所述省略LDAP容器属性时,运行代码的用户必须对默认User容器(即CN=Users,DC=yourDomain,DC=COM)和{{}具有读取权限1}}容器(即Computers)。

使用Active Directory用户和计算机我浏览了问题域的AD,但看不到任何CN=Computers,DC=yourDomain,DC=COM容器。我联系了IS并告知了他们,他们将目录恢复到良好状态。那时Computers按预期工作,我能够评估角色成员资格。

编辑:天啊!这也解决了SharePoint用户配置文件服务无法同步来自同一域中成员的用户详细信息的问题。我已经尝试了两年来追踪用户配置文件错误的原因而没有成功。