我的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
域的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);
}
这是怎么回事?如果我必须明确指定组,为什么为什么一开始就不能工作?如何缩小两组之间的差异?
答案 0 :(得分:0)
所以我终于想通了:
由PricipalPermissionAttribute
调用的权限检查仅会查找第一个组,该组的名称在所遇到的任何域中,并且在此之后停止,即使当前用户没有该组。
因此,在我的情况下,该实现首先在CLIENT-OLD
域中查找该组,并且由于存在名称存在问题的组,因此会检查该特定组(我假设的组SID)的所有用户。