访问控制机制

可以使用 Windows Communication Foundation(WCF)以多种方式控制访问。 本主题简要讨论了各种机制,并提供有关何时使用每个机制的建议;它旨在帮助你选择要使用的正确机制。 访问技术按复杂性顺序列出。 最简单的是 PrincipalPermissionAttribute;最复杂的是标识模型。

除了这些机制外,使用 WCF 模拟和委托将在委托和模拟中进行说明。

PrincipalPermissionAttribute

限制对服务方法访问的功能由 PrincipalPermissionAttribute 实现。 当属性应用于方法时,它可用于要求 Windows 组或 ASP.NET 角色中的特定调用方标识或成员身份。 如果客户端使用 X.509 证书进行身份验证,则会获得一个主要标识,该标识由使用者名称加上证书的指纹组成。

使用PrincipalPermissionAttribute来控制对运行该服务的计算机内资源的访问,前提是该服务的用户始终属于服务正在运行的同一 Windows 域。 可以轻松创建具有指定访问权限级别的 Windows 组(例如无、只读或读取和写入)。

有关使用特性的详细信息,请参阅 如何:使用 PrincipalPermissionAttribute 类限制访问。 有关标识的详细信息,请参阅服务标识和身份验证

ASP.NET 会员提供者

ASP.NET 的一项功能是成员资格提供程序。 尽管成员资格提供程序在技术上不是访问控制机制,但它允许通过限制可访问服务终结点的可能标识集来控制对服务的访问。 成员身份功能包括一个数据库,该数据库可以填充用户名/密码组合,使网站的用户能够与网站建立帐户。 若要访问使用成员资格提供程序的服务,用户必须使用其用户名和密码登录。

注释

必须先使用 ASP.NET 功能填充数据库,然后 WCF 服务才能将其用于授权目的。

如果已有来自现有 ASP.NET 网站的成员身份数据库,并且你希望让同一用户能够使用服务,并使用相同的用户名和密码进行授权,则也可以使用成员身份功能。

有关在 WCF 服务中使用成员身份功能的详细信息,请参阅 如何:使用 ASP.NET 成员资格提供程序

ASP.NET 角色提供程序

ASP.NET 的另一个功能是能够使用角色管理授权。 ASP.NET 角色提供程序使开发人员能够为用户创建角色,并将每个用户分配到角色或角色。 与成员资格提供程序一样,角色和分配存储在数据库中,并且可以使用由 ASP.NET 角色提供程序的特定实现提供的工具进行填充。 与成员身份功能一样,WCF 开发人员可以使用数据库中的信息按角色授权服务用户。 例如,它们可以将角色提供程序与 PrincipalPermissionAttribute 上述访问控制机制结合使用。

如果你有现有的 ASP.NET 角色提供程序数据库,并且想要在 WCF 服务中使用同一组规则和用户分配,也可以使用 ASP.NET 角色提供程序。

有关使用角色提供程序功能的详细信息,请参阅 How to: Use the ASP.NET Role Provider with a Service

授权管理器

另一项功能将授权管理器(AzMan)与 ASP.NET 角色提供程序相结合,以授权客户端。 ASP.NET 托管 Web 服务时,AzMan 可以集成到应用程序中,以便通过 AzMan 完成对服务的授权。 ASP.NET 角色管理器提供了一个 API,可用于管理应用程序角色、添加和删除角色以及检查角色成员身份,但不允许你查询用户是否有权执行命名任务或作。 AzMan 允许定义单个操作并将这些操作组合成任务。 借助 AZMan,除了角色检查之外,还可以检查用户是否可以执行任务。 可以在应用程序外部配置角色分配和任务授权,也可以在应用程序中以编程方式执行。 使用 AzMan 管理 Microsoft 管理控制台 (MMC) 管理单元,管理员可以更改角色可以在运行时执行的任务,还可以管理每个用户的角色成员资格。

如果您已能够访问现有的 AzMan 安装,并希望使用 AzMan 和 ASP.NET 角色提供程序的组合功能来授权服务用户,则可以使用 AzMan 和角色提供程序。

有关 AzMan 和 ASP.NET 角色提供程序的详细信息,请参阅 How To: Use Authorization Manager (AzMan) with ASP.NET 2.0。 有关使用 AzMan 和 WCF 服务的角色提供程序的详细信息,请参阅 How to: Use the ASP.NET Authorization Manager Role Provider with a Service.

标识模型

标识模型是一组 API,可用于管理声明和策略来授权客户端。 使用标识模型,可以检查调用方用来向服务进行身份验证的凭据中包含的每个声明,将声明与服务的策略集进行比较,并根据比较授予或拒绝访问权限。

如果需要精细控制并能够在授予访问权限之前设置特定条件,请使用标识模型。 例如,使用 PrincipalPermissionAttribute时,条件就是对用户的标识进行身份验证并属于特定角色。 相比之下,使用标识模型,可以创建一个策略,指出用户必须超过 18 岁,并拥有有效的驾照,然后才能查看文档。

您可以从标识模型基于声明的访问控制中获益的一个示例是在颁发的令牌方案中使用联合身份验证凭据的情形。 有关联合身份验证和颁发的令牌的详细信息,请参阅联合身份验证和颁发的令牌

有关标识模型的详细信息,请参阅 使用标识模型管理声明和授权

另请参阅