WCF中的安全除了主要包括验证、授权、传输安全以及身份管理等安全特性,还增加了一个抽象概念:总体安全策略(Overall Security Policy),它代表了在各种场景下在面对安全问题时的解决方法和思路。
身份认证
身份认证(Authentication)代表了一种特定的动作,在该动作中我们将检验服务的调用者是否确实符合他自己所声明的身份。WCF提供了多种验证机制:
无身份验证
Windows身份验证
在Windows域下,采用Kerberos协议做身份验证,在工作组下,用NTLM。
用户名和密码
调用者向服务提供一个用户名和密码。服务通过某种类型的凭证库(如数据库中的表)对调用者提供的凭证加以验证。
X509证书
定制机制
发布口令(Issued Token)
授权
授权用于处理允许服务调用这能够执行的内容。对调用者的授权建立在调用者确实符合它所声称的身份的假设之上。
当我们向客户端授权调用某个操作时,该操作会声明或显式的要求只有某些角色能够访问它。服务需要从凭证库中查询调用者的一个或多个角色,从而确认它是操作所要求的角色中的一员。
WCF本身支持两种类型的凭证库:服务可以使用Windows组(及其帐号)实现授权,或者使用一个ASP.NET Provider(如SQL Server Provider)保存用户账户和角色。WCF也支持自定义的角色库。
传输安全
身份验证与授权的前提是消息传输本身是安全的。传输安全设计三个要素,必须满足这三个要素才能保证服务的安全:消息完整性、消息机密性、提供相互验证的能力。
WCF支持五种不同的传输安全模式:None、Transport Security、Message Security、Mixed、Both。
None模式:
关闭了所有的功能。将传输安全设置为None模式是十分不可取的。
Transport Security模式:
WCF将采用一种安全的传输通道。Transport Security对通道上的所有通信加密,因而保证了完整性、机密性、相互验证性。此模式是获得消息最简单的模式,也是性能最好的。它主要的缺点在于,只能保证点对点的传输安全,也就是说客户端必须与服务直接连接。若在客户端与服务端之间有多个中间方,此模式就会出问题,因为中间方可能是不安全的。因此,此模式通常用于局域网应用程序。在那里,我们可以在一个受控环境中确保客户端与服务之间只有单独一个跳转。
Message Security模式:
此模式只是简单的为消息本身加密。它实现了端到端的安全,而不用考虑传送消息过程中所涉及的中间方的数目,也不用考虑传输是否安全。此模式是建立在一套行业标准的基础之上的。此模式的缺点在于,由于实现过程的复杂性,它可能会带来延迟。此模式一般用于互联网应用,在这种场景下,调用模式不太频繁,而且传输也不一定安全。
Mixed模式:
此模式在消息的完整性和机密性及服务端身份验证是采用了Transport模式,在保护客户端安全凭证的安全时又采用了Message模式。此模式由于采用了Transport模式,所以只能保证点对点的安全,应用很少。
Both模式:
提供了最好的安全。可以应用在不在乎调用延迟的断开应用程序中。
身份管理
在WCF中,当启用身份管理时,安全身份将沿着调用链传播,无论服务以何种身份执行、它总能查出它的调用者是谁。
总体策略
启用最高级的安全保障,直到抱怨为止。