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

本示例演示如何使用 <serviceAuthorization> element 来启用 PrincipalPermissionAttribute 属性以授予对服务操作访问权限。此示例基于入门示例示例。服务和客户端使用 wsHttpBinding Element 进行配置。Security elementmode 属性已设置为 Message,并且 clientCredentialType 已设置为 WindowsPrincipalPermissionAttribute 应用到每个服务方法并用于限制对每个操作的访问。调用方必须是 Windows 管理员才能访问每项操作。

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

提示

本主题的最后介绍了此示例的设置过程和生成说明。

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

<behaviors>
  <serviceBehaviors>
    <behavior name="CalculatorServiceBehavior">
      ...
      <!-- 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>

principlePermissionMode 设置为 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 示例的一次性安装过程

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

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

Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.