0

设置

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

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

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

我的 WCF webservice 使用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
  • 新客户\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);
}

问题

这里发生了什么?如果我必须明确指定组,为什么它首先会起作用?如何解决两组之间的差异?

4

1 回答 1

0

所以我终于想通了:

调用的权限检查PricipalPermissionAttribute只是在它遇到的任何域中查找具有该名称的第一个组,然后停止,即使当前用户没有该组。

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

于 2018-07-02T13:30:40.840 回答