从asp.net mvc应用程序使用时保护WCF服务的最佳方法

时间:2015-01-14 12:51:07

标签: asp.net-mvc wcf

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

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

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

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

这种情况是否有最佳做法?

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

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

根据这个Improving Web Services Security: Scenarios and Implementation Guidance for WCF,互联网上有两种运输安全选择:

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

哪一个最适合这种情况,那里基本上只有一个客户端用于WCF服务?

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

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

1 个答案:

答案 0 :(得分:0)

您可以使用BasicHTTPBinding在WCF和MVC服务器之间设置证书身份验证...我已经完成了。但是,从您的描述中,所有后端服务(WCF和MVC)都是基于Microsoft的,我不确定为什么使用BasicHTTPBinding。

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

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

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

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