Webdienstsicherheit (WS) mit SOAP-Beispiel
⚡ Intelligente Zusammenfassung
Web Service Security (WS-Security) ist ein Standard zum Schutz der Daten, die während eines SOAP-Webdienstaufrufs ausgetauscht werden. Diese Ressource erläutert Sicherheitsbedrohungen und Gegenmaßnahmen, die WS-Security-Standards, die Entwicklung eines sicheren Webdienstes mit Anmeldeinformationen sowie bewährte Verfahren für die Webdienstsicherheit.
Was ist WS-Sicherheit?
WS Security ist ein Standard, der die Sicherheit beim Datenaustausch im Rahmen eines Webdienstes regelt. Dies ist ein Schlüsselelement von SOAP und trägt maßgeblich zu dessen Beliebtheit bei der Entwicklung von Webdiensten bei.
Sicherheit ist ein wichtiges Merkmal jeder Webanwendung. Da fast alle Webanwendungen dem Internet ausgesetzt sind, besteht immer die Gefahr einer Sicherheitsbedrohung. Daher ist es bei der Entwicklung unerlässlich, …ping Bei webbasierten Anwendungen wird stets empfohlen, bei der Konzeption und Entwicklung der Anwendung auf Sicherheit zu achten.
Sicherheitsbedrohungen und Gegenmaßnahmen
Um die Sicherheitsbedrohungen zu verstehen, die einer Webanwendung schaden können, betrachten wir ein einfaches Szenario einer Webanwendung und sehen uns an, wie diese in Bezug auf die Sicherheit funktioniert.
Eine der Sicherheitsmaßnahmen für HTTP ist das HTTPS-Protokoll. HTTPS ermöglicht die sichere Kommunikation zwischen Client und Server über das Internet. Es nutzt Secure Sockets Layer (SSL) für eine sichere Übertragung. Sowohl Client als auch Server verfügen über ein digitales Zertifikat, das ihre Authentizität bei jeder Kommunikation zwischen ihnen bestätigt.
Bei einer standardmäßigen HTTPS-Kommunikation zwischen Client und Server finden folgende Schritte statt:
- Der Client sendet über das Client-Zertifikat eine Anfrage an den Server. Wenn der Server das Client-Zertifikat sieht, macht er eine Notiz in seinem Cache-System, damit er weiß, dass die Antwort nur an diesen Client zurückgehen sollte.
- Der Server authentifiziert sich dann gegenüber dem Client, indem er sein Zertifikat sendet. Dadurch wird sichergestellt, dass der Client mit dem richtigen Server kommuniziert.
- Die gesamte nachfolgende Kommunikation zwischen Client und Server ist verschlüsselt. Dadurch wird sichergestellt, dass andere Benutzer, die versuchen, die Sicherheit zu umgehen und an die benötigten Daten zu gelangen, diese nicht lesen können, da sie verschlüsselt sind.
Die oben beschriebene Sicherheitsmethode ist jedoch nicht in allen Situationen wirksam. Es kann vorkommen, dass ein Client mit mehreren Servern gleichzeitig kommuniziert. Das folgende Beispiel zeigt einen Client, der gleichzeitig mit einer Datenbank und einem Webserver kommuniziert. In solchen Fällen können nicht alle Informationen über das HTTPS-Protokoll übertragen werden.
Hier kommt SOAP ins Spiel, um solche Hindernisse durch die WS-Security-Spezifikation zu überwinden. Mit dieser Spezifikation werden alle sicherheitsrelevanten Daten im SOAP-Header-Element definiert. Das Header-Element kann die folgenden Informationen enthalten:
- Wenn die Nachricht im SOAP-Körper mit einem Sicherheitsschlüssel signiert wurde, kann dieser Schlüssel im Header-Element definiert werden.
- Wenn ein Element innerhalb des SOAP-Bodys verschlüsselt ist, enthält der Header die notwendigen Verschlüsselungsschlüssel, damit die Nachricht beim Erreichen des Ziels entschlüsselt werden kann.
In einer Umgebung mit mehreren Servern hilft die oben beschriebene SOAP-Authentifizierungstechnik folgendermaßen:
- Da der SOAP-Körper verschlüsselt ist, kann er nur von dem Webserver entschlüsselt werden, der den Webdienst hostet. Dies liegt an der Gestaltung des SOAP-Protokolls.
- Angenommen, die Nachricht wird in einer HTTP-Anfrage an den Datenbankserver übermittelt; sie kann nicht entschlüsselt werden, da die Datenbank nicht über die entsprechenden Mechanismen verfügt.
- Erst wenn die Anfrage den Webserver tatsächlich über das SOAP-Protokoll erreicht, kann dieser die Nachricht entschlüsseln und die entsprechende Antwort an den Client zurücksenden.
In den folgenden Abschnitten werden wir sehen, wie der WS-Security-Standard verwendet werden kann für SOAP.
Web-Service-Sicherheitsstandards
Wie bereits erwähnt, basiert der WS-Security-Standard darauf, die Sicherheitsdefinition im SOAP-Header einzubetten. Die Anmeldeinformationen im SOAP-Header werden auf zwei Arten verwaltet.
Zunächst wird ein spezielles Element namens UsernameToken definiert. Dieses dient dazu, Benutzername und Passwort an den Webdienst zu übermitteln. Alternativ kann ein Binärtoken über das BinarySecurityToken verwendet werden. Dies kommt zum Einsatz, wenn Verschlüsselungstechniken wie Kerberos oder X.509 verwendet werden.
Das folgende Diagramm veranschaulicht den Ablauf des Sicherheitsmodells in WS Security.
Nachfolgend sind die einzelnen Schritte des oben beschriebenen Arbeitsablaufs aufgeführt:
- Eine Anfrage kann vom Webdienstclient an den Sicherheitstokendienst gesendet werden. Dieser Dienst kann ein zwischengeschalteter Webdienst sein, der speziell dafür entwickelt wurde, Benutzernamen/Passwörter oder Zertifikate für den eigentlichen SOAP-Webdienst bereitzustellen.
- Das Sicherheitstoken wird dann an den Webdienst-Client übergeben.
- Anschließend ruft der Webdienstclient den Webdienst auf, stellt diesmal aber sicher, dass das Sicherheitstoken in die SOAP-Nachricht eingebettet ist.
- Der Webdienst versteht dann die SOAP-Nachricht mit dem Authentifizierungstoken und kann dann den Sicherheitstokendienst kontaktieren, um zu sehen, ob der Sicherheitstoken authentisch ist oder nicht.
Der folgende Codeausschnitt zeigt das Format des Authentifizierungsteils, der Teil des WSDL-Dokuments ist. Basierend auf diesem Ausschnitt enthält die SOAP-Nachricht zwei zusätzliche Elemente: den Benutzernamen und das Passwort.
<xs:element name="UsernameToken"> <xs:complexType> <xs:sequence> <xs:element ref="Username"/> <xs:element ref="Password" minOccurs="0"/> </xs:sequence> <xs:attribute name="Id" type="xs:ID"/> </xs:complexType> </xs:element>
Wenn die SOAP-Nachricht tatsächlich zwischen Clients und Server übertragen wird, könnte der Teil der Nachricht, der die Benutzeranmeldeinformationen enthält, wie oben dargestellt aussehen. Der Elementname „wsse“ ist ein spezieller, für SOAP definierter Elementname und bedeutet, dass er sicherheitsrelevante Informationen enthält.
So erstellen Sie sichere Webdienste
Betrachten wir nun ein Beispiel für die Sicherheit eines SOAP-Webdienstes. Wir werden die Sicherheit eines Webdienstes auf dem zuvor im SOAP-Kapitel gezeigten Beispiel aufbauen und eine zusätzliche Sicherheitsebene hinzufügen.
In unserem Beispiel erstellen wir einen einfachen Webdienst, der einen String an die aufrufende Anwendung zurückgibt. Diesmal müssen jedoch beim Aufruf des Webdienstes die Anmeldeinformationen an den aufrufenden Dienst übermittelt werden. Folgen Sie den nachstehenden Schritten, um unseren SOAP-Webdienst zu erstellen und die Sicherheitsdefinition hinzuzufügen.
Schritt 1) Der erste Schritt besteht darin, ein Leerzeichen zu erstellen Asp.Net Webanwendung. Klicken Sie in Visual Studio 2013 auf die Menüoption Datei -> Neues Projekt.
Sobald Sie auf die Option „Neues Projekt“ klicken, öffnet Visual Studio ein weiteres Dialogfeld, in dem Sie den Projekttyp auswählen und die erforderlichen Projektdetails eingeben können. Dies wird im nächsten Schritt erläutert.
Schritt 2) In diesem Schritt
- Stellen Sie sicher, dass Sie zuerst das auswählen C# Webvorlage für ASP.NET-Webanwendungen. Dieses Projekt muss von diesem Typ sein, um ein Webdienstprojekt zu erstellen. Bei Auswahl dieser Option führt Visual Studio die notwendigen Schritte zum Hinzufügen der für jede webbasierte Anwendung erforderlichen Dateien aus.
- Geben Sie Ihrem Projekt einen Namen, in unserem Fall „webservice.asmxGeben Sie anschließend unbedingt einen Speicherort für die Projektdateien an.
Nach Abschluss des Vorgangs wird die erstellte Projektdatei im Projektmappen-Explorer von Visual Studio 2013 angezeigt.
Schritt 3) In diesem Schritt fügen wir unserem Projekt eine Webdienstdatei hinzu.
- Klicken Sie zunächst mit der rechten Maustaste auf die Projektdatei, wie unten dargestellt.
- Sobald Sie mit der rechten Maustaste auf die Projektdatei klicken, können Sie die Option „Hinzufügen → Webdienst (ASMX)“ auswählen, um eine Webdienstdatei hinzuzufügen. Geben Sie der Webdienstdatei einfach den Namen „Tutorialdienst“ an.
Im obigen Schritt öffnet sich ein Dialogfeld, in dem Sie den Namen der Webdienstdatei eingeben können. Geben Sie im folgenden Dialogfeld „TutorialService“ als Dateinamen ein.
Schritt 4) Fügen Sie den folgenden Code zu Ihrer Tutorial Service-ASMX-Datei hinzu. Der folgende Codeausschnitt wird verwendet, um eine benutzerdefinierte Klasse hinzuzufügen, die zum Ändern des SOAP-Headers verwendet wird, wenn die SOAP-Nachricht generiert wird. Da wir jetzt Sicherheitsanmeldeinformationen zum SOAP-Header hinzufügen möchten, ist dieser Schritt erforderlich.
return "This is a Guru99 Web Service"; } public class AuthHeader : SoapHeader { public string UserName; public string Password; } }
Code Erläuterung:
- Wir erstellen jetzt eine separate Klasse namens AuthHeader was vom typ ist SoapHeader-KlasseWenn Sie die im SOAP-Header übergebenen Daten ändern möchten, müssen Sie eine Klasse erstellen, die die in .NET integrierte SoapHeader-Klasse verwendet. Durch die Anpassung des SOAP-Headers können wir nun beim Aufruf des Webdienstes einen Benutzernamen und ein Passwort übergeben.
- Anschließend definieren wir die Variablen „Benutzername“ und „Passwort“, die vom Typ Zeichenfolge sind. Sie werden verwendet, um die Werte des Benutzernamens und des Passworts zu speichern, die an den Webdienst übergeben werden.
Schritt 5) Als nächstes muss der folgende Code in dieselbe Zeile eingefügt werden TutorialService.asmx-DateiDieser Code definiert die Funktion unseres Webdienstes. Diese Funktion gibt die Zeichenkette „Dies ist ein Guru99 Webdienst“ an den Client. Diesmal wird die Zeichenkette jedoch nur zurückgegeben, wenn die Clientanwendung die Anmeldeinformationen an den Webdienst übergibt.
public class TutorialService : System.Web.Services.WebService { public AuthHeader Credentials; [SoapHeader("Credentials")] [WebMethod] public string Guru99WebService() { if (Credentials.UserName.ToLower() != "Guru99" || Credentials.Password.ToLower() != "Guru99Password") { throw new SoapException("Unauthorized", SoapException.ClientFaultCode); } else return "This is a Guru99 Web service"; }
Code Erläuterung:
- Hier erstellen wir ein Objekt der AuthHeader-Klasse, die im vorherigen Schritt erstellt wurde. Dieses Objekt wird an unsere übergeben Guru99Webservice in dem Benutzername und Passwort genau überprüft werden können.
- Das Attribut [SoapHeader] wird nun verwendet, um festzulegen, dass beim Aufruf des Webdienstes der Benutzername und das Passwort übergeben werden müssen.
- In diesem Codeblock untersuchen wir den Benutzernamen und das Passwort, die beim Aufruf des Webdienstes übergeben werden. Wenn der Benutzername gleich „Guru99“ und das Passwort lautet „Guru99Password“, dann die Meldung „Dies ist ein GuruDer Webdienst „99“ wird an den Client übermittelt. Andernfalls wird eine Fehlermeldung an den Client gesendet, wenn die falsche Benutzer-ID und das falsche Passwort angegeben wurden.
Wenn der Code erfolgreich ausgeführt wird, wird die folgende Ausgabe angezeigt, wenn Sie Ihren Code im Browser ausführen.
Ausgang:
Die obige Ausgabe wird beim Ausführen des Programms angezeigt und bedeutet, dass der Webdienst nun verfügbar ist. Klicken wir auf den Dienst. DescriptIonenverbindung.
Aus der Dienstbeschreibung können Sie nun erkennen, dass der Benutzername und das Passwort Bestandteile des sind wsdl Datei. Diese Parameter müssen gesendet werden, wenn der Webdienst aufgerufen wird.
Web Service Security beste Praktiken
Im Folgenden sind die Sicherheitsaspekte aufgeführt, die bei der Arbeit mit Webdiensten beachtet werden sollten:
- Audit- und Protokollverwaltung – Verwenden Sie die Anwendungsprotokollierung, um alle Anfragen an die Webdienste zu protokollieren. Dies liefert einen detaillierten Bericht darüber, wer den Webdienst aufgerufen hat, und kann bei der Folgenabschätzung im Falle einer Sicherheitsverletzung hilfreich sein.
- Ablauf der Aufrufe an den Webdienst Versuchen Sie, den Ablauf der Aufrufe von Webdiensten zu verfolgen. Standardmäßig kann eine Anwendung mehrere Webdienstanfragen mit Authentifizierungstoken zwischen diesen Webdiensten senden. Alle Aufrufe zwischen Webdiensten müssen überwacht und protokolliert werden.
- Heikle Informationen – Fügen Sie in Ihren Protokolleinträgen keine sensiblen Informationen wie Passwörter, Kreditkartennummern oder andere vertrauliche Daten hinzu. Sollte ein Ereignis solche Informationen enthalten, muss es vor der Protokollierung verworfen werden.
- Track Business Operations - Track wichtige Geschäftsvorgänge. Instrumentieren Sie Ihre Anwendung beispielsweise so, dass der Zugriff auf besonders sensible Methoden und Geschäftslogik protokolliert wird. Nehmen wir als Beispiel einen Online-Shop.ping Anwendung. Eine typische Anwendung umfasst mehrere Schritte, wie die Auswahl der zu kaufenden Artikel, das Hinzufügen der Artikel zum Warenkorb und schließlich den Kaufvorgang. Dieser gesamte Geschäftsprozess muss optimiert werden. tracvom Webdienst gestartet.
- Ordnungsgemäße Authentifizierung Die Authentifizierung ist der Mechanismus, mit dem Clients ihre Identität gegenüber dem Webdienst mithilfe bestimmter Anmeldeinformationen nachweisen können. Benutzeranmeldeinformationen dürfen niemals gespeichert werden. Daher ist zu beachten, dass bei Verwendung von WS Security zum Aufruf des Webdienstes die im SOAP-Header gesendeten Anmeldeinformationen nicht gespeichert, sondern verworfen werden müssen.














