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

PrincipalPermissionAttribute demand same role from multiple domains

设置

我的 WCF 网络服务在 Windows 服务器 2012 上的 IIS 8.0 上运行,环境中有多个域:

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

我的 WCF 网络服务使用这样的 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 域 [=41] 的服务用户=]不能

解决方法

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

[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)的所有用户。