📅  最后修改于: 2020-11-19 09:28:19             🧑  作者: Mango
WCF服务拥有具有两个安全模式或级别的健壮的安全系统,因此只有目标客户端才能访问该服务。 WCF在很大程度上缓解了分布式事务中常见的安全威胁。
WCF服务具有四个关键安全功能,如下图所示。
身份验证-这里的身份验证不限于标识消息的发送者,而是相互的,即,需要消息接收者的身份验证才能排除任何形式的中间人攻击的可能性。
授权-这是WCF服务为确保安全性而采取的下一步,在此确定该服务是否应授权调用方进一步进行操作。尽管授权不依赖于身份验证,但通常遵循身份验证。
机密性–呼叫者和服务之间的信息交换是保密的,以限制消息无意发送给其他人的解释。为了使之成为可能,加密与其他各种机制一起使用。
完整性-最终的关键概念是保持完整性,即,确保消息在从发送者到接收者的过程中未被任何人篡改。
WCF提供以下传输安全模式,以确保客户端和服务器之间的安全通信。下面提到了多种传输安全模式。
无-此模式不能保证任何类型的消息安全性,并且服务不会获得有关客户端的任何凭据。此模式具有很高的风险,因为它可能允许篡改消息,因此不建议使用。
传输-此模式是通过使用通信协议(例如TCP,IPC,Https和MSMQ)来实现消息的安全传输的最简单方法。当传输是点对点传输并且主要用于受控环境(即Intranet应用程序)时,此模式更有效。
消息-安全模式允许相互认证,并在很大程度上保护隐私,因为消息是加密的并且可以通过http传输,这不被视为安全协议。在这里,端到端提供了安全性,而无需考虑消息传递中涉及多少个中介,以及是否存在安全的传输。该模式通常由Internet应用程序使用。
混合-此安全模式不经常使用,并且仅在客户端级别提供客户端身份验证。
两者-此安全模式既包含传输安全性又包含消息安全性,以提供强大的安全性,但通常会导致整体性能超负荷。仅MSMQ支持这一功能。
默认情况下,除BasicHttpBinding之外的所有WCF绑定都具有一定程度的传输安全性。
消息级别的安全性不依赖于WCF协议。它通过使用标准算法对数据进行加密来与消息数据本身一起使用。许多客户端凭据可用于消息安全级别的不同绑定,下面将讨论这些凭据。
WCF中消息级别安全性的客户端凭据
无-在这里,加密用于保护消息,而未执行客户端身份验证,这意味着匿名客户端可以访问该服务。除BasicHttpBinding外,所有WCF绑定均支持此客户端凭据。但是,应注意,对于NetNamedPipeBinding,此客户端凭据完全不可用。
Windows-在此,消息加密和客户端身份验证均针对实时登录用户进行。同样,在这种情况下,与所有其他WCF绑定不同,NetNamedPipeBinding不可用,BasicHttpBinding也未提供支持。
UserName-在这里,消息通过提供UserName进行加密和安全保护,并且对客户端进行身份验证,因为他们需要提供密码。就像上面的两个客户端凭据一样,BasicHttpBinding不支持UserName,并且不可用于NetNamedPipeBinding。
证书-与消息加密一起,客户端和服务都获得带有证书的身份验证。该客户端凭据可用,并且除NetNamedPipeBinding之外的所有WCF绑定均支持此客户端凭据。
IssuedToken-来自诸如Cardspace之类的机构的Issued Token用于验证消息。消息的加密也在此处执行。
以下代码显示了如何在WCF消息安全级别/模式下配置客户端凭据。
...
...
在此,必须注意,传输安全模式在消息安全级别上有优势,因为前者更快。它不需要任何其他编码,并提供互操作性支持,因此不会降低整体性能。
但是,从安全性的角度来看,消息安全性模式更加健壮,并且独立于协议,并且提供了端到端的安全性。