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.














