PrincipalPermissionAttribute要求来自多个域的相同角色

时间:2018-06-29 12:48:18

标签: wcf iis windows-authentication principalpermission

设置

我的WCF Web服务在Windows Server 2012的IIS 8.0上运行,具有多个域:

  • 服务器
  • 老客户
  • 新客户

应用程序池使用SERVER域中的服务帐户运行(让我们说SEVER\WsSvc01)。

我的WCF Web服务使用PrincipalPermissionAttribute,如下所示:

[PrincipalPermission(SecurityAction.Demand, Role = "grp_WsUsers")]
public string Echo(string message)
{
    return string.Format("{0:o}: {1}", DateTime.Now, message);
}

两个客户端域中都有一个grp_WsUsers活动目录组:

  • CLIENT-OLD \ grp_WsUsers
  • CLIENT-NEW \ grp_WsUsers

问题

来自CLIENT-OLD域的CLIENT-OLD\grp_WsUsers成员的用户可以访问来自CLIENT-NEW域的服务用户不能

解决方法

如果我同时包括两个组,则所有用户都可以访问该服务

[PrincipalPermission(SecurityAction.Demand, Role = "CLIENT-OLD\\grp_WsUsers")]
[PrincipalPermission(SecurityAction.Demand, Role = "CLIENT-NEW\\grp_WsUsers")]
public string Echo(string message)
{
    return string.Format("{0:o}: {1}", DateTime.Now, message);
}

问题

这是怎么回事?如果我必须明确指定组,为什么为什么一开始就不能工作?如何缩小两组之间的差异?

1 个答案:

答案 0 :(得分:0)

所以我终于想通了:

PricipalPermissionAttribute调用的权限检查仅会查找第一个组,该组的名称在所遇到的任何域中,并且在此之后停止,即使当前用户没有该组。

因此,在我的情况下,该实现首先在CLIENT-OLD域中查找该组,并且由于存在名称存在问题的组,因此会检查该特定组(我假设的组SID)的所有用户。