【问题标题】:Recommendations for wcf security architecture对 wcf 安全架构的建议
【发布时间】:2013-01-17 02:49:32
【问题描述】:

WCF 中的安全网络服务

背景

  • 我们想要创建一个安全的 WCF 服务,它可以对数据进行加密/解密。将要加密和解密的数据的性质要求尽可能高的安全级别。
  • 此服务的消费者将成为我们网络中的应用程序。将是 asp.net 网站、其他 wcf 服务、控制台应用程序以及可能在 linux 上运行的基于 java 的应用程序
  • 消费者将在没有任何域成员身份的本地计算机帐户上运行。

我已经阅读了大量有关 wcf 安全性的内容,并且在很大程度上理解了这些概念。我正在寻找一种对其他有类似需求的人来说效果很好的参考架构。

问题

  1. 鉴于新的 wcf 服务不能依赖任何数据库等来存储凭据,并且也不能依赖消费者成为 Windows 域的成员,我应该使用什么身份验证方法。我应该能够在服务中正确识别消费者,因为功能会根据消费者的身份而略有变化。
  2. 我应该使用哪种类型的传输安全 - 传输/消息/混合?其中是否有性能方面的考虑?
  3. 我还应该考虑什么?

【问题讨论】:

    标签: wcf security architecture


    【解决方案1】:
    1. 使用客户端证书进行身份验证。要识别客户,请使用带有自定义标头的消息合同。每个客户端都应在标头中添加一些唯一值。
    2. 我建议在您的情况下使用传输安全性。使用消息安全性有两个主要缺点: 性能以及对您更重要的 互操作性,正如您所说,您可能需要支持 Java 客户端。您说您已经阅读了很多关于 WCF 安全性的内容,但以防万一您错过了,这里有一篇关于 Transport and Message 安全性的好文章。
    3. 注意您的服务绑定。考虑到可能的 Java 客户端,我建议使用 basicHttpBinding。

    希望对你有帮助!

    已编辑: 标头值应该是私有的。只有您和您的客户应该知道它。这就像如果我知道您的 Gmail 密码,很快就会找到您的登录信息。 如果您认为它不够安全,您可以跳过自定义标头并将每个客户端映射到一个 IP 或一组 IP。例如,IP 12.32.456.10 对应客户端 A。然后您可以将此映射存储在自定义配置文件部分中,您可以对此部分进行加密,这样即使有权访问您的服务文件的人也无法获取映射。

    如果有帮助,别忘了将答案标记为有用;)

    【讨论】:

    • 我有一个后续问题:如果我要使用客户端证书进行身份验证和自定义标头来识别客户端,我如何确保 ClientA 不会试图通过将自己标识为 ClientB 来冒充 ClientB在标题中。这可能对我们产生不好的影响。
    • @JohnUKP 我更新了我的答案,因为 cmets 有长度限制
    • 您如何看待使用证书本身的属性来识别客户端?例如,如果将证书的 Friendlyname 属性分配给 ClientA,那么我们可以确保证书对客户端进行身份验证并隐式标识它。客户端无法控制将自己标识为 ClientA 或 ClientB。那么问题是确保只有 ClientA 可以访问自己的证书(无论如何我们都必须这样做)
    • @JohnUKP 这也是一个不错的选择,因为它还将所有身份验证和识别信息封装在一个非常重要的证书中。
    猜你喜欢
    • 2012-08-08
    • 2011-10-14
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 2021-03-26
    • 2016-03-16
    相关资源
    最近更新 更多