[MSDN]WCF(15)WCF身份验证及授权

说明:本内容来自微软的webcast,讲师为徐长龙。为了用手机阅读方便点,抄录存为txt。

本次课程内容包括
- 身份验证
- 授权


传输安全性
- 传输安全模式
模式             说明
----------    -----------------------------------
None            传输层和消息层都不提供安全措施。默认情况下,预定义绑定都不使用此模式,
                   只有 <basicHttpBinding> 元素(使用代码时,则为 BasicHttpBinding 类)例外。
Transport     使用安全传送(如 HTTPS)实现完整性、保密性和相互身份验证。
Message       使用 SOAP 消息安全实现完整性、保密性和相互身份验证。
                   SOAP 消息是按照 WS-Security 标准获得保护的。
混合模式       使用传送安全实现完整性、保密性和服务器身份验证。
                  使用消息安全(WS-Security 和其他标准)实现客户端身份验证。
                (此模式的枚举值是 TransportWithMessageCredential。) 

- 传输安全模式(Transport)的凭据类型
设置                说明
-------------   --------------------------------------
None              指定客户端不需要提供任何凭据。 这相当于匿名客户端。
Basic              指定基本身份验证。
Digest            指定摘要式身份验证。
Ntlm               指定在 Windows 域中使用 SSPI 协商进行 Windows 身份验证。
                     要使用 SSPI 协商,就需要使用 Kerberos 协议或 NT LanMan(NTLM)。
Windows        指定在 Windows 域中使用 SSPI 进行 Windows 身份验证。
                     SSPI选择 Kerberos 协议或 NTLM 作为身份验证服务。
                     SSPI 首先尝试 Kerberos 协议;如果失败,则使用 NTLM。
Certificate       使用证书(通常是 X.509)执行客户端身份验证。
IssuedToken   允许服务要求使用由安全令牌服务或 CardSpace 颁发的令牌对客户端进行身份验证。

- 消息安全模式( Message )的凭据类型
设置                 说明
-------------    -------------------------------
None               允许服务与匿名客户端交互。
Windows         允许在 Windows 凭据的已通过身份验证的上下文中执行 SOAP 消息交换。
                      使用 SSPI 协商机制选择 Kerberos 协议或 NTLM 作为身份验证服务。
Username        允许服务要求使用用户名凭据对客户端进行身份验证。请注意,
                      WCF 不允许对用户名进行任何加密操作,,例如生成签名或加密数据。
                      因此,WCF 强制要求在使用用户名凭据时确保传输的安全性。
Certificate        允许服务要求使用证书对客户端进行身份验证。
CardSpace       允许服务要求使用 CardSpace 对客户端进行身份验证。
IssuedToken    允许服务使用安全令牌服务来提供自定义令牌。

- 使用 WCF 传输安全的常见方案包括
  - 使用 Windows 确保传输安全
    - WCF 客户端和服务部署在 Windows 域( 或 Windows 目录林 )中
  - 使用 UserName 和 HTTPS 确保传输安全
    - 客户端凭据根据数据库(其中的内容为用户名/密码对)进行身份验证。服务是用受信任的安全套接字层(SSL)证书部署在一个 HTTPS 地址的。由于消息是同过 Internet 传输的,因此,客户端和服务需要相互进行身份验证,并且必须在传输过程中保持消息的保密性和完整性。
  - 使用证书确保传输安全
    - 客户端和服务都具有可用于确保消息安全的证书。客户端和服务通过 Internet 进行相互通信,执行要求消息完整性、保密性和相互身份验证的重要事务。


安全性概述
- ASP.NET 成员资格提供程序
  - ASP.NET 成员资格提供程序是一种功能,可供ASP.NET 开发人员用于创建运行用户创建唯一用户名和密码组合的网站。
- 使用自定义用户名和密码验证程序
  - 默认情况下,当用户和密码用于身份验证时,WCF 会使用 Windows 来验证用户名和密码。不过,WCF 允许自定义用户名和密码身份验证方案,也称为”验证程序“。
  - 创建一个从 UserNamePasswordValidator 派生的类,然后对其进行配置。
- 消息安全证书

授权
- 授权时控制对资源(例如服务或文件)的访问和权限的过程。
- WCF 可以采用多种方式来控制访问
- PrincipalPermissionAttribute
  - PrincipalPermissionAttribute 用于限制对服务方法的访问。将该属性应用于方法时,它可用于请求特定调用方在 Windows 组或 ASP.NET 角色中的标识或成员资格。
  - 如果服务用户将始终属于运行服务的同一个 Windows 域的成员,请使用 PrincipalPermissionAttribute 来控制对运行服务的计算机上的资源的访问。
- ASP.NET 成员资格提供程序
  - 成员资格提供程序是 ASP.NET 中的一项功能。虽然成员资格提供程序在技术上不是访问控制机制,但它允许通过限制可以访问服务终结点的可能标识的集来控制对服务的访问。
- ASP.NET 角色提供程序、
  - ASP.NET 还有一项使用角色管理授权的功能。使用 ASP.NET 成员资格提供程序,开发人员可以为用户创建角色,然后将每个用户分配给一个或多个角色。
  - 与成员资格功能一样,WCF 开发人员可以使用该数据库中的信息按角色对服务用户进行授权。例如,它们可以将该角色提供程序与上述 PrincipalPermissionAttribute 访问控制机制结合使用。
- 标识模型
  - 标识模型是一组 API , 可以用于管理用于向客户端授权的声明和策略。使用标识模型,可以检查包含在调用方用于将其自身向服务进行身份验证的凭据中的每个声明,将这些声明与服务策略的集进行比较,然后基于比较结果授予或拒绝访问权限。
  - 如果在授予访问权限之前需要良好的控制以及可以设置特定的条件,请使用标识模型。例如,在使用 PrincipalPermissionAttribute 时,标准不过是对用户的标识进行身份验证以及该用户标识属于特定的角色。相比之下,使用标识模型,您可以创建如下策略:规定用户必须年满18周岁,并且必须持有有效的驾驶执照才准许查看文档。
- 模拟和委托
  - 模拟是一种常用技术,服务可使用该技术限制客户端对服务域资源的访问。服务域资源可以是计算机资源,如本地文件(模拟),也可以使其他计算机上的资源,如文件共享(委托)。
  - 通常,客户端会调用摸个服务,使该服务代表客户端执行某个操作。模拟使服务可在执行操作时充当客户端。委托使前端服务也能模拟客户端。模拟是检查客户端是否有权执行特定操作的最常用的方法,而委托是一种使功能以及客户端的标识流向后端服务的方法。

人的一生应该这样度过:当他回首往事的时候,不会因为虚度年华而悔恨,也不会因为碌碌无为而羞愧。
原文地址:https://www.cnblogs.com/htht66/p/2329247.html