繁体   English   中英

如果要在不直接访问数据库的DMZ中托管ASP.NET MVC Web应用程序,应如何设计其层(TCP端口1433被防火墙阻止)?

[英]How to design tiers of ASP.NET MVC web application if it is to be hosted in DMZ with no direct access to database (tcp port 1433 blocked by firewall)?

请考虑以下网络安全设置:

       Users         Internet
         |        
  ====Firewall==== Port 80, 443 only
         |              
     Web Server      DMZ - ASP.NET MVC + Web API
         |          
  ====Firewall==== Port 80, 443 only
         |         
     "App" Server   WCF or ASP.NET Web API ??
         |           
      Database      Internal network

我已经在许多客户端上看到了上述网络设置。 IT基础结构团队不允许DMZ中的Web服务器通过端口1433建立与内部网络中托管的SQL Server的直接连接。具有讽刺意味的是,我已经看到web.config位于Web服务器上并带有纯文本DB密码,好的

通常,我已经看过并致力于解决方案,其中WCF托管在“ App”服务器上( 可以在HTTP端口上使用 ),如图所示。 WCF成为Web前端与DB交互的唯一方法。 使用WCF的一个“好处”是,它返回易于从ASP.NET MVC前端使用的强类型对象。

问题:

  1. 使用WCF是因为它允许在80或443上进行数据传输并返回强类型对象。 这是一个好选择吗?
  2. 应该改用ASP.NET Web API吗? 如果是这样,如何使用复杂的对象图实现强类型? JSON.net和内置的序列化程序足以胜任这项工作吗?
  3. 有更好的解决方案吗?

请注意,我们目前无法使用ASP.NET Core。

由于这是一个反复出现的问题,我真的很想听听社区是否有比使用WCF更好的解决方案。

我刚刚完成了一个具有相同问题的系统,数据库访问仅限于App服务器。

我们选择采用的方法是在App Server上托管Mvc前端和Web Api后端。

为了获得通常会克服WCF的强类型,我们选择了一个名为Refit的工具: https : //github.com/paulcbetts/refit 它使您可以将具有预配置的url模板的接口转换为可以通过普通DI容器注入的对象,使其非常易于测试,并删除了大量样板HttpClient代码。 这对于WebApi后端确实非常有效。

IIS反向代理构建到您的DMZ区域,并且您不需要两个单独的服务器(web + app)。 当反向代理将所有相关流量路由到您的Web服务器时,您可以在内部网络中运行它。

    Users           Internet
     |        
====Firewall====  Port 80, 443 only
     |              
IIS Reverse Proxy     DMZ 
     |          
====Firewall====  Port 80, 443 only
     |         
  Web Server        ASP.NET MVC
     |           
  Database       Internal network

我将进行以下设置:

          Users         Internet
                   |        
            ====Firewall==== Port 80, 443 only
                   |              
         {Proxy/load balancer with URL pattern rules} 
            |                    |
http://foo.com/api/...        http://foo.com/ui/...
            |                    | 
            |          {static content server} 
            |
            |          
     ====Firewall==== Port 80, 443 only
            |         
        "App" Server   ASP.NET Web API 
            |           
         Database      Internal network
  • 静态内容服务器可以是MVC应用程序,而无需访问数据库
  • URL模式规则可能会替换为不同的域(例如foo.com和api.foo.com)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM