【问题标题】:Best way to secure a WCF service when used from an asp.net mvc application从 asp.net mvc 应用程序使用时保护 WCF 服务的最佳方法
【发布时间】:2015-03-12 15:54:26
【问题描述】:

我有一个多层 asp.net mvc 应用程序,包含以下级别:

  • 数据库(带有存储过程、视图和表)
  • WCF 服务(包含业务逻辑和通过实体框架连接到数据库)
  • Asp.net mvc 应用程序与 WCF 服务通信并生成 html
  • 浏览器

最终用户在 asp.net mvc 层中使用 Identity 2.0 进行身份验证。

Web 服务器是 WCF 服务的唯一客户端。

对于这种情况是否有任何最佳实践?

Web 服务器和 WCF 服务可能在不同的位置运行,因此我们无法使用 Intranet 协议。

由于我们同时控制 Web 服务器和 WCF 服务,我们知道通信将是点对点的。这意味着我们可以使用传输安全性来避免消息安全性带来的额外开销。

据此,Improving Web Services Security: Scenarios and Implementation Guidance for WCF,互联网上的传输安全有两种选择:

  • 使用 basicHttpBinding 进行基本身份验证
  • 使用 wsHttpBinding 进行证书身份验证

哪一个最适合这种 WCF 服务基本上只有一个客户端的场景?

由于 http 的无状态特性,对 Web 服务器的每个新请求都会实例化一个新的服务代理。

有没有办法在调用 Web 服务器上缓存来自 WCF 服务的身份验证信息以提高性能?

【问题讨论】:

    标签: asp.net-mvc wcf


    【解决方案1】:

    您可以使用 BasicHTTPBinding 在 WCF 和 MVC 服务器之间设置证书身份验证...我已经做到了。但我不知道你为什么使用 BasicHTTPBinding,根据你的描述,所有后端服务(WCF 和 MVC)都是基于微软的。

    BasicHTTPBinding 是一个通用的 WCF 协议,它将接受任何格式正确的 HTTP 请求 (Gets/Post),无论该请求来自 Windows 机器还是 JAVA/PHP 世界。正如你所说,它也是无国籍的。这使得 BasicHTTPBinding 适合互操作情况,但在设置两个以 MS 为中心的系统之间的通信时更复杂(比说 wsHTTPBinding)。

    例如,默认情况下,NONE 是 BasicHttpBinding 的默认加密。根据我的经验,添加 Transport 需要编程和大量的反复试验才能运行。 BasicHttpBinding 也不支持事务或会话,而 WSHttpBinding 支持。因此,根据您的描述,从长远来看,WSHttpBinding 将更简单、更容易设置和维护。但是您也可以考虑使用 NetTCPBinding,因为您要使用服务器到服务器。

    您会在下面找到一个很棒的 MS 网站,它解释了所有不同的 WCF 协议,包括每种方法的优缺点。

    http://msdn.microsoft.com/en-us/library/ms730879.aspx

    【讨论】:

      猜你喜欢
      • 2014-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      • 2013-02-19
      相关资源
      最近更新 更多