授予对服务操作的访问权限

此示例演示如何使用<serviceAuthorization>来启用PrincipalPermissionAttribute属性,以便授权访问服务操作。 此示例基于 入门 示例。 服务和客户端是使用 <wsHttpBinding> 配置的。 安全性mode<的属性>已设置为MessageclientCredentialType已设置为 Windows。 该 PrincipalPermissionAttribute 被应用于每个服务方法,并用于限制对每个操作的访问。 调用方必须是 Windows 管理员才能访问每个操作。

在此示例中,客户端是一个控制台应用程序 (.exe),服务是由 Internet 信息服务 (IIS) 承载的。

注释

本示例的设置过程和生成说明位于本主题末尾。

服务配置文件使用 <serviceAuthorization> 来设置 principalPermissionMode 属性:

<behaviors>
  <serviceBehaviors>
    <behavior>
      <!-- The serviceAuthorization behavior sets the
           principalPermissionMode to UseWindowsGroups.
           This puts a WindowsPrincipal on the current thread when a
           service is invoked. -->
      <serviceAuthorization principalPermissionMode="UseWindowsGroups" />
    </behavior>
  </serviceBehaviors>
</behaviors>

principalPermissionMode设置为UseWindowsGroups可以启用基于 Windows 组名称的PrincipalPermissionAttribute的使用。

PrincipalPermissionAttribute 应用于每个作,以要求调用方成为 Windows 管理员组的一部分,如以下示例代码所示。

[PrincipalPermission(SecurityAction.Demand,
                             Role = "Builtin\\Administrators")]
public double Add(double n1, double n2)
{
    double result = n1 + n2;
    return result;
}

运行示例时,操作请求和响应将显示在客户端控制台窗口中。 如果客户端在属于管理员组的帐户下运行,则能成功与每个操作通信,否则访问将被拒绝。 若要尝试授权失败,请在不属于管理员组的帐户下运行客户端。 在控制台窗口中按 Enter 关闭客户端。

可以通过实现IErrorHandler来通知服务有关授权失败的问题。 有关实现 的信息,请参阅IErrorHandler

设置、生成和运行示例

  1. 确保已为 Windows Communication Foundation 示例 执行One-Time 安装过程。

  2. 若要生成解决方案的 C# 或 Visual Basic .NET 版本,请按照 生成 Windows Communication Foundation 示例中的说明进行操作。

  3. 要使用单机配置或跨计算机配置运行示例,请按照运行 Windows Communication Foundation 示例中的说明进行操作。