Wie baue ich einen sicheren Webservice mit .Net?

8

Ich muss einen einfachen Webservice aufbauen, um Daten über das Internet in ein HR-System ein- und auszugeben (es handelt sich um eine gehostete Lösung). Ich verwende IIS und ASP.Net mit .Net 2.0.

Nachdem wir uns damit befasst haben, gibt es mehrere Möglichkeiten, den Webservice sicher zu machen - ich bin auf der Suche nach einer Methode, die ich wählen soll, mit einigen Ansichten über Vor- und Nachteile.

Dies sind die mir bekannten Methoden:

SoapHeaders über SSL

Veröffentlichen Sie die UID / PWD in einem Soap-Header und implementieren Sie eine SOAP-Erweiterung ( Link ).
Ziemlich einfach zu implementieren und sollte ziemlich sicher über SSL sein. Dies ist bei weitem meine bevorzugte Option aufgrund der relativen Einfachheit. Auch aus historischen Gründen muss ich den Webservice von VBScript aus allen Dingen konsumieren, so dass die Möglichkeit, einfach mit einfachen SOAP umzugehen, ein Bonus ist. Gibt es jedoch Vorbehalte? Werde ich meine Kunden beschweren, dass dies ein Sicherheitsrisiko darstellt?

Verwenden von WCF mit TransportWithMessageCredential

Ich habe viele alte Artikel gefunden, die sich auf WS beziehen, und wenn ich nicht falsch verstanden werde, ist das jetzt in WCF gegeben? Dieser Microsoft-Link enthält einen Primer.
Wenn ich es richtig verstehe, verwendet es zertifikatbasierte Sicherheit zwischen Client und Server für die Authentifizierung. Ist das korrekt oder habe ich es komplett falsch verstanden? Ich vermute, dass dies ein viel größerer Job sein wird, zumindest im Hinblick auf die Umsetzung. Außerdem kann ich nicht direkt von VBScript aus auf den Webservice zugreifen, muss also einen DLL-Call-Call schreiben und diesen dann lokal - korrekt? Ist das sogar in .Net 2.0 verfügbar?

Andere Methoden

  • Ich könnte den anonymen Zugriff auf Die asmx-Datei und die Verwendung verlassen sich auf IIS Authentifizierung durch Herausforderung / Antwort. Das ist eigentlich praktisch in meinem Szenario aber fühlt sich an sehr unelegant (und keine Ahnung wie mach das auch von VBScript).
  • Übergeben einer UID an den Methodenaufruf ist so ein armer Cousin des SoapHeader Ich werde das nicht benutzen.

Ich wäre sehr dankbar für jeden Hinweis auf die beste Herangehensweise an dieses Problem. Wenn jemand ein gutes Argument dafür hat, warum Soap-Header sicher sind, dann würde ich es gerne hören, denn das scheint am einfachsten zu sein, solange es "sicher genug" ist.

    
Frans 19.03.2009, 19:25
quelle

5 Antworten

3

Sie sollten unbedingt IIS und Windows für die Authentifizierung verwenden. IIS kann eingehende Anforderungen einem AD-Benutzer zuordnen (NTLM, Zertifikate, Kerberos usw.). Von dort haben Sie eine WindowsPrincipal , die Sie verwenden können, um zu verlangen dass der Benutzer in einer Gruppe ist. Wenn es Ihnen nichts ausmacht, den Gruppennamen in den Code zu kompilieren, können Sie sogar die PrincipalPermissionAttribute zu Ihren Service-Methoden, damit es vollständig deklarativ ist.

Mit Windows erhalten Sie die Plattform, mit der Sie alle Sicherheitsprobleme lösen können. Passwörter werden nicht im Klartext übertragen, noch müssen Sie ein eigenes Challenge / Response-System (yuck) erstellen und spezifizieren. Verschiedene Clients können auf verschiedene Arten authentifiziert werden (erfordern Zertifikate für einige, NTLM für andere zulassen).

Schließlich haben Sie weniger Code, da Sie Windows zum Verwalten der Benutzer und .NET Framework zum Erzwingen von Sicherheitsprüfungen verwenden können.

Bearbeiten:

Vielleicht denken Sie, dass die Sicherung des ASMX Hacky ist, weil das der einzige Schritt ist, den Sie betrachten? Ich würde zustimmen! Ein Webservice, der nur davon abhängt, dass Sie anonyme Klänge verweigert haben, klingt in der Tat sehr schwach. Der Webservice-Code selbst sollte die Gruppenmitgliedschaft verlangen, nachdem die Authentifizierung durchgeführt wurde. Auf diese Weise, wenn Sie den Server falsch konfigurieren, haben Sie ihn unzugänglich gemacht, nicht unsicher.

    
MichaelGG 19.03.2009, 19:49
quelle
1

Verwenden Sie WCF. Es benötigt .NET 3.0 oder höher (genauso gut 3.5 SP1), aber das ist nur .NET 2.0 mit ein paar Service Packs und einigen neuen Assemblies, also ist es sicher.

Ich empfehle, die ASMX-Webdienste nie wieder für die Neuentwicklung zu verwenden, es sei denn, es gibt keine andere Wahl.

Sie haben vielleicht schon von "WSE" oder "Web Service Extensions" gelesen. Diese sind veraltet und waren eine Reihe von Erweiterungen für ASMX-Web-Services, um den WS-* Satz von Protokollen zu implementieren. Von diesem erfuhr Microsoft, dass die ASMX-Plattform nicht ausreichend erweiterbar war, und erstellte daher WCF (Windows Communication Foundation). Vermeide WSE wie die Pest.

    
John Saunders 20.03.2009 00:45
quelle
0

Ich hatte dieses Problem letzte Woche und ich wählte SOAP mit SSL. Ich habe das auch mit dem MD5-verschlüsselten Schlüssel der Daten kombiniert. Dies gilt natürlich nur, wenn Sie "Besitzer" von Server und Client sind.

    
Glenn 19.03.2009 19:35
quelle
0

WCF ist der Weg zu gehen. Es bietet viele mögliche Sicherheitslösungen, einige standardbasiert und interoperabel, einige .NET- oder Windows-spezifisch.

Eine schnelle Suche nach "WCF-Sicherheit" bietet Ihnen viele Ressourcen, aber ich schlage vor, dass Sie beginnen mit diesem Artikel: "Grundlagen der WCF-Sicherheit" von Michele Leroux Bustamante.

    
Rob Windsor 19.03.2009 19:57
quelle
0
___ answer664590 ___

Verwenden Sie WCF. Es benötigt .NET 3.0 oder höher (genauso gut 3.5 SP1), aber das ist nur .NET 2.0 mit ein paar Service Packs und einigen neuen Assemblies, also ist es sicher.

Ich empfehle, die ASMX-Webdienste nie wieder für die Neuentwicklung zu verwenden, es sei denn, es gibt keine andere Wahl.

Sie haben vielleicht schon von "WSE" oder "Web Service Extensions" gelesen. Diese sind veraltet und waren eine Reihe von Erweiterungen für ASMX-Web-Services, um den WS-* Satz von Protokollen zu implementieren. Von diesem erfuhr Microsoft, dass die ASMX-Plattform nicht ausreichend erweiterbar war, und erstellte daher WCF (Windows Communication Foundation). Vermeide WSE wie die Pest.

    
___ qstnhdr ___ Wie baue ich einen sicheren Webservice mit .Net? ___ answer663701 ___

Ich hatte dieses Problem letzte Woche und ich wählte SOAP mit SSL. Ich habe das auch mit dem MD5-verschlüsselten Schlüssel der Daten kombiniert. Dies gilt natürlich nur, wenn Sie "Besitzer" von Server und Client sind.

    
___ tag123net ___ Das .NET-Framework ist ein Software-Framework, das hauptsächlich für das Microsoft Windows-Betriebssystem entwickelt wurde. Es enthält eine Implementierung der Basisklassenbibliothek, Common Language Runtime (allgemein als CLR bezeichnet), Common Type System (allgemein als CTS bezeichnet) und Dynamic Language Runtime. Es unterstützt viele Programmiersprachen, einschließlich C #, VB.NET, F # und C ++ / CLI. NICHT für Fragen zu .NET Core verwenden. ___ answer663803 ___

WCF ist der Weg zu gehen. Es bietet viele mögliche Sicherheitslösungen, einige standardbasiert und interoperabel, einige .NET- oder Windows-spezifisch.

Eine schnelle Suche nach "WCF-Sicherheit" bietet Ihnen viele Ressourcen, aber ich schlage vor, dass Sie beginnen mit diesem Artikel: "Grundlagen der WCF-Sicherheit" von Michele Leroux Bustamante.

    
___ tag123webservices ___ Ein "Webservice" ist ein Softwaresystem, das Interoperabilität zwischen Maschine und Maschine über das World Wide Web unterstützt. ___ tag123security ___ Themen in Bezug auf Anwendungssicherheit und Angriffe auf Software. Bitte verwenden Sie dieses Tag nicht alleine, da dies zu Mehrdeutigkeiten führt. Wenn es sich bei Ihrer Frage nicht um ein spezielles Programmierproblem handelt, können Sie es stattdessen bei Information Security SE anfordern: https://security.stackexchange.com ___ antwort664540 ___

Sie können auch 2-Wege-SSL mit IIS versuchen, so können Sie sicherstellen, dass der Client ist, wer sie sagen, sie sind, verschlüsseln die Daten über die Leitung, und führen Sie auch den Web-Service als verschiedene Benutzer basierend auf dem Zertifikat wird gestellt.

    
___ qstntxt ___

Ich muss einen einfachen Webservice aufbauen, um Daten über das Internet in ein HR-System ein- und auszugeben (es handelt sich um eine gehostete Lösung). Ich verwende IIS und ASP.Net mit .Net 2.0.

Nachdem wir uns damit befasst haben, gibt es mehrere Möglichkeiten, den Webservice sicher zu machen - ich bin auf der Suche nach einer Methode, die ich wählen soll, mit einigen Ansichten über Vor- und Nachteile.

Dies sind die mir bekannten Methoden:

SoapHeaders über SSL

Veröffentlichen Sie die UID / PWD in einem Soap-Header und implementieren Sie eine SOAP-Erweiterung ( Link ).
Ziemlich einfach zu implementieren und sollte ziemlich sicher über SSL sein. Dies ist bei weitem meine bevorzugte Option aufgrund der relativen Einfachheit. Auch aus historischen Gründen muss ich den Webservice von VBScript aus allen Dingen konsumieren, so dass die Möglichkeit, einfach mit einfachen SOAP umzugehen, ein Bonus ist. Gibt es jedoch Vorbehalte? Werde ich meine Kunden beschweren, dass dies ein Sicherheitsrisiko darstellt?

Verwenden von WCF mit TransportWithMessageCredential

Ich habe viele alte Artikel gefunden, die sich auf WS beziehen, und wenn ich nicht falsch verstanden werde, ist das jetzt in WCF gegeben? Dieser Microsoft-Link enthält einen Primer.
Wenn ich es richtig verstehe, verwendet es zertifikatbasierte Sicherheit zwischen Client und Server für die Authentifizierung. Ist das korrekt oder habe ich es komplett falsch verstanden? Ich vermute, dass dies ein viel größerer Job sein wird, zumindest im Hinblick auf die Umsetzung. Außerdem kann ich nicht direkt von VBScript aus auf den Webservice zugreifen, muss also einen DLL-Call-Call schreiben und diesen dann lokal - korrekt? Ist das sogar in .Net 2.0 verfügbar?

Andere Methoden

  • Ich könnte den anonymen Zugriff auf Die asmx-Datei und die Verwendung verlassen sich auf IIS Authentifizierung durch Herausforderung / Antwort. Das ist eigentlich praktisch in meinem Szenario aber fühlt sich an sehr unelegant (und keine Ahnung wie mach das auch von VBScript).
  • Übergeben einer UID an den Methodenaufruf ist so ein armer Cousin des SoapHeader Ich werde das nicht benutzen.

Ich wäre sehr dankbar für jeden Hinweis auf die beste Herangehensweise an dieses Problem. Wenn jemand ein gutes Argument dafür hat, warum Soap-Header sicher sind, dann würde ich es gerne hören, denn das scheint am einfachsten zu sein, solange es "sicher genug" ist.

    
___ answer663770 ___

Sie sollten unbedingt IIS und Windows für die Authentifizierung verwenden. IIS kann eingehende Anforderungen einem AD-Benutzer zuordnen (NTLM, Zertifikate, Kerberos usw.). Von dort haben Sie eine WindowsPrincipal , die Sie verwenden können, um zu verlangen dass der Benutzer in einer Gruppe ist. Wenn es Ihnen nichts ausmacht, den Gruppennamen in den Code zu kompilieren, können Sie sogar die PrincipalPermissionAttribute zu Ihren Service-Methoden, damit es vollständig deklarativ ist.

Mit Windows erhalten Sie die Plattform, mit der Sie alle Sicherheitsprobleme lösen können. Passwörter werden nicht im Klartext übertragen, noch müssen Sie ein eigenes Challenge / Response-System (yuck) erstellen und spezifizieren. Verschiedene Clients können auf verschiedene Arten authentifiziert werden (erfordern Zertifikate für einige, NTLM für andere zulassen).

Schließlich haben Sie weniger Code, da Sie Windows zum Verwalten der Benutzer und .NET Framework zum Erzwingen von Sicherheitsprüfungen verwenden können.

Bearbeiten:

Vielleicht denken Sie, dass die Sicherung des ASMX Hacky ist, weil das der einzige Schritt ist, den Sie betrachten? Ich würde zustimmen! Ein Webservice, der nur davon abhängt, dass Sie anonyme Klänge verweigert haben, klingt in der Tat sehr schwach. Der Webservice-Code selbst sollte die Gruppenmitgliedschaft verlangen, nachdem die Authentifizierung durchgeführt wurde. Auf diese Weise, wenn Sie den Server falsch konfigurieren, haben Sie ihn unzugänglich gemacht, nicht unsicher.

    
___ tag123vbscript ___ VBScript (Visual Basic Scripting Edition) ist eine von Microsoft entwickelte interpretierte Skriptsprache, die auf Visual Basic basiert. VBScript ist nicht dasselbe wie VBA oder VB.NET. Sie sind drei verschiedene Dinge, also verwenden Sie die richtigen Tags. ___ tag123wssecurity ___ WS-Security ist eine Erweiterung von SOAP für die Anwendung von Sicherheit für Web-Services durch XML-Signatur und XML-Verschlüsselung. ___
Andrew Cox 20.03.2009 00:21
quelle