Wie werden Ebenen der ASP.NET MVC-Webanwendung entworfen, wenn sie in DMZ ohne direkten Zugriff auf die Datenbank gehostet werden soll (TCP-Port 1433 von der Firewall blockiert)?

8

Beachten Sie die folgende Netzwerksicherheitseinstellung:

%Vor%

Ich habe die obige Netzwerkeinrichtung bei vielen Kunden gesehen. Das IT-Infrastrukturteam erlaubt Webservern in DMZ nicht, eine direkte Verbindung zu SQL Server herzustellen, der im internen Netzwerk über Port 1433 gehostet wird. Ironie ist, dass ich web.config auf dem Webserver mit DB-Passwörtern liegen sehe, die sie sind OK mit.

Normalerweise habe ich Lösungen gesehen und bearbeitet, bei denen ein WCF auf dem "App" -Server gehostet wird (, da er an HTTP-Ports verwendet werden kann), wie im Diagramm gezeigt. WCF wird die einzige Möglichkeit für das Web-Frontend, mit der DB zu interagieren. Ein "Vorteil" der Verwendung von WCF besteht darin, dass stark typisierte Objekte zurückgegeben werden, die über das ASP.NET MVC-Frontend einfach zu verwenden sind.

Fragen:

  1. WCF wird verwendet, weil es die Datenübertragung auf 80 oder 443 ermöglicht und stark typisierte Objekte zurückgibt. Ist es eine gute Wahl?
  2. Soll stattdessen ASP.NET Web API verwendet werden? Wenn ja, wie erreicht man eine starke Typisierung mit komplexen Objektgraphen? Sind JSON.net und eingebaute Serializer ausreichend für den Job?
  3. Gibt es eine bessere Lösung?

Bitte beachten Sie, dass wir derzeit keinen ASP.NET Core verwenden können.

Da dies ein wiederkehrendes Problem ist, würde ich gerne von der Community hören, wenn es eine bessere Lösung als WCF gibt.

    
Ravi M Patel 26.01.2018, 08:18
quelle

3 Antworten

3

Ich habe gerade ein System mit dem gleichen Problem gemacht, DB-Zugriff ist auf einen App-Server beschränkt.

Die Methode, die wir verwenden wollten, war ein Mvc-Frontend und ein Web-API-Backend, das auf dem App-Server gehostet wurde.

Um die starke Typisierung zu erhalten, die Sie normalerweise über WCF erhalten würden, entschieden wir uns für ein Tool namens Refit: Ссылка . Es ermöglicht Ihnen, eine Schnittstelle mit einer vorkonfigurierten URL-Vorlage in ein Objekt zu verwandeln, das Sie über einen normalen DI-Container injizieren können. Dadurch ist es sehr überprüfbar und entfernt eine Menge des HttpClient-Codes. Dies funktioniert sehr gut mit einem WebApi-Back-End.

    
Slicksim 26.01.2018, 10:47
quelle
3

Erstellen IIS Reverse Proxy zu Ihrem DMZ-Bereich und Sie benötigen nicht zwei separate Server (Web + App). Wenn der Reverse-Proxy den gesamten relevanten Verkehr an Ihren Webserver weiterleitet, können Sie ihn im internen Netzwerk ausführen.

%Vor%     
Risto M 01.02.2018 13:00
quelle
-1

Ich würde folgendes Setup machen:

%Vor%
  • Statischer Inhaltsserver kann MVC-Anwendung (en) sein, ohne auf die Datenbank
  • zugreifen zu müssen
  • URL-Musterregeln werden möglicherweise durch verschiedene Domänen ersetzt (z. B. foo.com und api.foo.com)
Ihar Yakimush 28.01.2018 21:02
quelle