比较受支持的WCF身份验证凭据的相对优点和适当方案

时间:2010-12-02 23:25:05

标签: c# .net wcf authentication comparison

我正在尝试为WCF服务选择正确的身份验证机制。 This article解释了支持的凭据是什么 - 我只是不明白如何在它们之间做出决定。

请有人提供每个认证选项何时适合使用的解释,以及每种认证选项的优缺点。

作为参考,身份验证选项为:

  • 基本
  • 摘要
  • NTLM
  • 证书
  • 密码

注意:我在这篇文章中看过一篇很棒的MSDN文章,但我不能再为我的生活找到它了。

2 个答案:

答案 0 :(得分:1)

<强>无 非常简单 - 当您不想识别或验证用户时使用此功能。

基本和摘要: 这些身份验证类型不再使用,但有时您可能需要连接到IIS中托管的旧Web服务,该服务可能配置为使用基本身份验证或摘要式身份验证。流量不会被加密。对于Basic,密码将以纯文本形式发送,而对于Digest,密码将以加密不良的形式发送。避免使用这些身份验证类型。

NTLM和Windows: NTLM使用NT LAN Manager来控制安全性。默认情况下,Windows将使用Kerberos(即Active Directory)来控制安全性。如果Kerberos不可用,则默认为NTLM。如果你特别需要避免使用Kerberos,那么只能使用NTLM(我想不出你想要这样做的场景,但是WCF的一部分是它的灵活性)。

<强>证书: 如果您的用户拥有可用于识别它们的自己的证书,则可以考虑使用此身份验证模式。可以猜到密码 - 很难猜出证书,因此这是一种非常安全的身份验证模式(假设证书本身是安全的)。

密码: 如果要创建自己的验证用户用户名和密码的方法,请使用密码。这可能涉及访问自定义数据库中的现有用户凭据存储。您需要编写自己的UserNamePasswordValidator - 例如http://nayyeri.net/custom-username-and-password-authentication-in-wcf-3-5

总结一下,我通常选择Windows作为身份验证模式。它安全而简单,适用于企业环境中的大多数人。如果您正在创建新服务,并且由于某种原因无法使用Windows,请转到证书或密码。如果您正在使用IIS中托管的旧SOAP服务,则可能需要查看使用None,Basic或Digest。

答案 1 :(得分:1)

虽然我问过这个问题,但我会添加我对证书的了解,因为这是我曾经合作过的事情 - 虽然如果我的理解不完美,我会很乐意纠正。

X.509证书由公钥和私钥组成,由受信任的Certificate Authority发布(您可以self-sign a certificate,这会将证书的有用性限制为仅限受信任的来源) 。 CA将对证书收取费用,并在一段时间后过期。

不需要保护公钥并将其提供给服务器。私钥保密,由客户端使用。由私钥加密的消息可以通过公钥解密。

来自客户端的请求具有嵌入在SOAP中的数字签名。这是使用私钥生成的。当服务器收到请求时,它使用公钥来读取签名。如果可以读取签名,则该请求被认为是真实的。

在Active Directory中,有一种机制可以将X.509证书映射到用户帐户,因此您可以基于X.509身份验证模拟具有特定权限集的用户。

X.509的好处是:

  1. 它可以跨域使用;和
  2. 私钥可以安全地存储在客户端的证书存储中。因此,没有包含凭据的.config文件。
  3. 无法控制私钥的分发和存储类似于在便利贴上编写用户名/密码并将其粘贴在显示器上。