内部网络上的WCF端点安全最佳实践

时间:2012-06-14 20:54:05

标签: .net wcf security .net-4.0

在我们的组织中,我们托管了许多WCF服务,这些服务在我们的内部网络上相互通信。通常,我们使用netTcpBinding来提供这些服务以提高性能。目前关于是否在绑定端点上启用安全性存在争议,我想知道是否有任何特定的指导方针可用于确定是否/何时禁用安全性。

我倾向于支持保密,因为

  1. 这是默认设置,因此需要较少的配置才能使用
  2. 这是默认设置,因此打算经常使用
  3. 只是“感觉”更安全,而不是安全性更低
  4. 辩论的另一方是:

    1. 假设网络本身是安全的,没有理由使用安全性
    2. 使用安全性的效率较低
    3. 如果客户端有自己的客户端对其进行身份验证,有时对服务进行身份验证会比较棘手(我认为这可能被描述为“双跳”方案)
    4. 我想无论最佳实践是什么,最终的答案最终都是“它取决于”。但是,我想知道在生产环境中哪种情况应该受到青睐。

3 个答案:

答案 0 :(得分:1)

听起来好像你已经没有安全性地运行服务了。显然有人决定采用你当前的配置。我倾向于非常依赖“如果它不会破坏而不是修复它”。原则上,因此在您的场景中,更改许多WCF服务的配置将需要一个案例来说明为什么需要投入所需的时间和精力来这样做。坦率地说,在你的场景中,你提出的有利于安全的三点不会为我削减它。

这是为新开发或新环境做出决定的完全不同的场景。在这种情况下,默认为“安全开启”。 (假设最小的努力,成本和性能影响)将是我的首选方案。

答案 1 :(得分:1)

你是对的 - '这取决于'。

安全性是一件好事,但如果您不需要它(即您在安全的环境中工作,不需要身份验证),那么它可能会产生巨大的开销。

我最近参与了一个项目,我们发现Windows身份验证导致了巨大的开销,请求大小增加一倍或三倍(大量微小请求)。我们只是关闭了身份验证,以显着提升性能。

WCF的优点是安全性是完全可配置的。假设您的代码中没有任何安全依赖项,您可以根据需要通过配置在以后很容易地打开和关闭它。还假设您正在使用配置!

答案 2 :(得分:1)

它还没有被提及,但我也倾向于想到你传递的是什么类型的数据。如果我们谈论银行交易或其他重要事项,我会选择尽可能多的安全性。另一方面,如果只是在某些桌面应用程序中显示的数据,并且不是帐号,社会保险号,信用卡信息等,那么我认为禁用它没有任何问题。

此外,性能目前是一个问题吗?如果您必须满足SLA定义和交易时间,则禁用安全性可能是件好事。

它是如此可配置,因为有很多事情需要考虑:)