Wcf PrincipalPermissionAttribute要求来自多个域的相同角色 安装程序
My WCF webservice在Windows Server 2012的IIS 8.0上运行,环境中有多个域:Wcf PrincipalPermissionAttribute要求来自多个域的相同角色 安装程序,wcf,iis,windows-authentication,principalpermission,Wcf,Iis,Windows Authentication,Principalpermission,My WCF webservice在Windows Server 2012的IIS 8.0上运行,环境中有多个域: 服务器 老客户 新客户 应用程序池使用服务器域中的服务帐户运行(比如服务器\WsSvc01) 我的WCF Web服务使用如下PrincipalPermissionAttribute: [PrincipalPermission(SecurityAction.Demand, Role = "grp_WsUsers")] public string Echo(string messa
- 服务器
- 老客户
- 新客户
服务器
域中的服务帐户运行(比如服务器\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\u WsUsers
active directory组:
- CLIENT-OLD\grp\wsu用户
- CLIENT-NEW\grp\wsu用户
CLIENT-OLD\grp\WsUsers成员的CLIENT-OLD
域的用户可以访问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);
}
问题:
这里发生了什么?如果我必须明确指定组,那么首先为什么它可以工作?我怎样才能找出这两组人之间的差异呢?所以我终于找到了答案:
PricipalPermissionAttribute
调用的权限检查只需查找第一个组,该组的名称位于它遇到的任何域中,然后停止,即使当前用户没有该组
因此,在我的例子中,实现首先在CLIENT-OLD
域中查找该组,并且由于存在一个名称有问题的组,因此会检查该特定组的所有用户(我假设为组SID)