WCF-安全之身份验证与授权

来源:百度文库 编辑:神马文学网 时间:2024/04/30 19:56:31

身份验证和授权由不可分割的关系,在考虑授权时,也必须考虑身份验证。这两个过程紧密相关。其中有以下两个方面的原因: 

• 第一,任何有意义的授权策略都需要已验证身份的用户。

• 第二,验证用户标识的方式(具体说,就是如何在应用程序中表示已经过验证的用户标识)将决定您可支配的网关守卫。

某些网关守卫(例如 ASP.NET 文件授权、企业服务 (COM+) 角色和 Windows ACL)要求经过身份验证的 Windows 标识,此类标识采用 WindowsIdentity 对象的形式,该对象封装的是用来定义调用方安全性上下文的 Windows 访问令牌。而其他网关守卫(例如 ASP.NET URL 授权和 .NET 角色)则无此要求。它们只要求标识经过验证即可,并不需要一定要用 Windows 访问令牌来表示标识。

第 章 –身份验证和授权 

身份验证

如果是ASP.NET程序,那么可以考虑使用ASP.NET成员资格提供程序。另外一个值得考虑的就是使用自定义 用户名和密码的验证程序。

默认情况下,当用户名和密码用于身份验证时,WCF会使用Windwos来验证用户名和密码。不过WCF允许自定义用户名和密码的身份验证方案,也称为“验证程序”。

1.创建一个从 UserNamePasswordValidator 派生的类。

2.通过重写 Validate 方法,实现自定义身份验证方案。

3.一般考虑检索数据库

4.若要将身份验证错误返回到客户端,应在 Validate 方法中引发 FaultException

要使用身份验证,需要配置一个使用传送消息安全或者消息安全的绑定。

访问控制

  WCF,可以采用多种方式来控制访问。访问技术按复杂程度顺序列出。最简单的是 PrincipalPermissionAttribute;ASP.NET 角色提供程序;授权管理器;而最复杂的是标识模型。

PrincipalPermissionAttribute

PrincipalPermissionAttribute 用于限制对服务方法的访问。将该属性应用于方法时,它可用于请求特定调用方在 Windows 组或 ASP.NET 角色中的标识或成员资格。如果使用 X.509 证书对客户端进行身份验证,则将为该客户端提供一个由该证书的主题名称和指纹组成的主标识。

如果服务用户将始终属于运行服务的同一个 Windows 域的成员,请使用 PrincipalPermissionAttribute 来控制对运行服务的计算机上的资源的访问。您可以轻松创建已指定访问级别(如,无、只读或读写)的 Windows 组。

ASP.NET 成员资格提供程序

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

ASP.NET 角色提供程序

ASP.NET 还有一项使用角色管理授权的功能。使用 ASP.NET 角色提供程序,开发人员可以为用户创建角色,然后将每个用户分配给一个或多个角色。与成员资格提供程序一样,角色和分配也存储在数据库中,而且可以使用由 ASP.NET 角色提供程序的专门实现所提供的工具来进行填充。与成员资格功能一样,WCF 开发人员可以使用该数据库中的信息按角色对服务用户进行授权。例如,他们可以将该角色提供程序与上述 PrincipalPermissionAttribute 访问控制机制结合使用。

授权管理器

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

标识模型

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

如果在授予访问权限之前需要良好的控制以及可以设置特定的条件,请使用标识模型。例如,在使用 PrincipalPermissionAttribute 时,标准不过是对用户的标识进行身份验证以及该用户标识属于特定的角色。相比之下,使用标识模型,您可以创建如下策略:规定用户必须年满 18 周岁,并且必须持有有效的驾驶执照才准许查看文档

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

参考:

身份验证

授权