Web Service (WS) Sicherheits-Tutorial mit SOAP-Beispiel

Inhaltsverzeichnis:

Anonim

Was ist WS-Sicherheit?

WS-Sicherheit ist ein Standard, der sich mit der Sicherheit befasst, wenn Daten als Teil eines Webdienstes ausgetauscht werden. Dies ist eine wichtige Funktion in SOAP, die es für die Erstellung von Webdiensten sehr beliebt macht.

Sicherheit ist ein wichtiges Merkmal in jeder Webanwendung. Da fast alle Webanwendungen dem Internet ausgesetzt sind, besteht immer die Möglichkeit einer Sicherheitsbedrohung für Webanwendungen. Daher wird bei der Entwicklung von webbasierten Anwendungen immer empfohlen, sicherzustellen, dass die Anwendung unter Berücksichtigung der Sicherheit entworfen und entwickelt wird.

In diesem Tutorial lernen Sie:

  • Sicherheitsbedrohungen und Gegenmaßnahmen
  • Sicherheitsstandards für Webdienste
  • So erstellen Sie sichere Webdienste
  • Best Practices für die Sicherheit von Webdiensten

Sicherheitsbedrohungen und Gegenmaßnahmen

Um Sicherheitsbedrohungen zu verstehen, die einer Webanwendung feindlich gegenüberstehen können, schauen wir uns ein einfaches Szenario einer Webanwendung an und sehen, wie sie in Bezug auf die Sicherheit funktioniert.

Eine der für HTTP verfügbaren Sicherheitsmaßnahmen ist das HTTPS-Protokoll. HTTPS ist die sichere Art der Kommunikation zwischen dem Client und dem Server über das Web. HTTPS verwendet die Secure Sockets-Schicht oder SSL für die sichere Kommunikation. Sowohl der Client als auch der Server verfügen über ein digitales Zertifikat, mit dem sie sich als echt identifizieren können, wenn eine Kommunikation zwischen dem Client und dem Server stattfindet.

In einer Standard-HTTPS-Kommunikation zwischen dem Client und dem Server werden die folgenden Schritte ausgeführt

  1. 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.
  2. Der Server authentifiziert sich dann beim Client, indem er sein Zertifikat sendet. Dies stellt sicher, dass der Client mit dem richtigen Server kommuniziert.
  3. Die gesamte Kommunikation danach zwischen Client und Server wird verschlüsselt. Auf diese Weise wird sichergestellt, dass andere Benutzer, die versuchen, die Sicherheit zu beeinträchtigen und die erforderlichen Daten abzurufen, diese nicht lesen können, da sie verschlüsselt sind.

Die oben genannte Art der Sicherheit funktioniert jedoch nicht in allen Situationen. Es kann vorkommen, dass der Client mit mehreren Servern kommunizieren kann. Ein Beispiel unten zeigt einen Client, der gleichzeitig mit einer Datenbank und einem Webserver spricht. In solchen Fällen können nicht alle Informationen das https-Protokoll durchlaufen.

Hier setzt SOAP an, um solche Hindernisse zu überwinden, indem die WS-Sicherheitsspezifikation vorhanden ist. Mit dieser Spezifikation werden alle sicherheitsrelevanten Daten im SOAP-Header-Element definiert.

Das Header-Element kann die unten genannten Informationen enthalten

  1. Wenn die Nachricht im SOAP-Body mit einem Sicherheitsschlüssel signiert wurde, kann dieser Schlüssel im Header-Element definiert werden.
  2. Wenn ein Element im SOAP-Body verschlüsselt ist, enthält der Header die erforderlichen Verschlüsselungsschlüssel, damit die Nachricht beim Erreichen des Ziels entschlüsselt werden kann.

In Umgebungen mit mehreren Servern hilft die oben beschriebene Technik der SOAP-Authentifizierung auf folgende Weise.

  • Da der SOAP-Body verschlüsselt ist, kann er nur von dem Webserver entschlüsselt werden, auf dem sich der Webdienst befindet. Dies liegt daran, wie das SOAP-Protokoll entworfen wurde.
  • Angenommen, die Nachricht wird in einer HTTP-Anforderung an den Datenbankserver übergeben und kann nicht entschlüsselt werden, da die Datenbank nicht über die richtigen Mechanismen verfügt.
  • Nur wenn die Anforderung tatsächlich als SOAP-Protokoll den Webserver erreicht, kann sie die Nachricht entschlüsseln und die entsprechende Antwort an den Client zurücksenden.

In den folgenden Themen erfahren Sie, wie der WS-Sicherheitsstandard für SOAP verwendet werden kann.

Sicherheitsstandards für Webdienste

Wie im vorherigen Abschnitt erläutert, dreht sich der WS-Sicherheitsstandard darum, dass die Sicherheitsdefinition im SOAP-Header enthalten ist.

Die Anmeldeinformationen im SOAP-Header werden auf zwei Arten verwaltet.

Zunächst wird ein spezielles Element namens UsernameToken definiert. Dies wird verwendet, um den Benutzernamen und das Passwort an den Webdienst zu übergeben.

Die andere Möglichkeit besteht darin, ein Binär-Token über das BinarySecurityToken zu verwenden. Dies wird in Situationen verwendet, in denen Verschlüsselungstechniken wie Kerberos oder X.509 verwendet werden.

Das folgende Diagramm zeigt den Ablauf der Funktionsweise des Sicherheitsmodells in WS Security

Nachfolgend sind die Schritte aufgeführt, die im obigen Workflow ausgeführt werden

  1. Eine Anfrage kann vom Webdienst-Client an den Sicherheitstoken-Dienst gesendet werden. Dieser Dienst kann ein Zwischen-Webdienst sein, der speziell für die Bereitstellung von Benutzernamen / Kennwörtern oder Zertifikaten für den eigentlichen SOAP-Webdienst entwickelt wurde.
  2. Das Sicherheitstoken wird dann an den Webdienstclient übergeben.
  3. Der Webdienst-Client hat dann den Webdienst aufgerufen, diesmal jedoch sichergestellt, dass das Sicherheitstoken in die SOAP-Nachricht eingebettet ist.
  4. Der Webdienst versteht dann die SOAP-Nachricht mit dem Authentifizierungstoken und kann sich dann an den Sicherheitstoken-Dienst wenden, um festzustellen, ob das Sicherheitstoken authentisch ist oder nicht.

Das folgende Snippet zeigt das Format des Authentifizierungsteils, der Teil des WSDL-Dokuments ist. Basierend auf dem folgenden Snippet enthält die SOAP-Nachricht zwei zusätzliche Elemente, eines ist der Benutzername und das andere das Passwort.

Wenn die SOAP-Nachricht tatsächlich zwischen den Clients und dem Server übertragen wird, kann der Teil der Nachricht, der die Benutzeranmeldeinformationen enthält, wie oben gezeigt aussehen. Der Name des wsse-Elements ist ein spezielles Element mit dem Namen SOAP und bedeutet, dass es sicherheitsbasierte Informationen enthält.

So erstellen Sie sichere Webdienste

Schauen wir uns nun das Sicherheitsbeispiel für SOAP-Webdienste an. Wir werden eine Webdienstsicherheit auf dem Beispiel aufbauen, das weiter oben im SOAP-Kapitel gezeigt wurde, und ihm eine Sicherheitsschicht hinzufügen.

In unserem Beispiel erstellen wir einen einfachen Webdienst, mit dem eine Zeichenfolge an die Anwendung zurückgegeben wird, die den Webdienst aufruft. Diesmal müssen jedoch beim Aufrufen des Webdienstes die Anmeldeinformationen an den aufrufenden Dienst übergeben werden. Führen Sie die folgenden Schritte aus, um unseren SOAP-Webdienst zu erstellen und die Sicherheitsdefinition hinzuzufügen.

Schritt 1) Der erste Schritt besteht darin, eine leere Asp.Net-Webanwendung zu erstellen. Klicken Sie in Visual Studio 2013 auf die Menüoption Datei-> Neues Projekt.

Sobald Sie auf die Option Neues Projekt klicken, zeigt Visual Studio ein weiteres Dialogfeld an, in dem Sie den Projekttyp auswählen und die erforderlichen Details des Projekts angeben können. Dies wird im nächsten Schritt erklärt

Schritt 2) In diesem Schritt

  1. Stellen Sie sicher, dass Sie zuerst die C # -Webvorlage für die ASP.NET-Webanwendung auswählen. Das Projekt muss von diesem Typ sein, um ein Webdienstprojekt zu erstellen. Wenn Sie diese Option auswählen, führt Visual Studio die erforderlichen Schritte aus, um die erforderlichen Dateien hinzuzufügen, die für eine webbasierte Anwendung erforderlich sind.
  2. Geben Sie einen Namen für Ihr Projekt an, der in unserem Fall als " webservice.asmx " angegeben wurde . Geben Sie dann einen Speicherort an, an dem die Projektdateien gespeichert werden.

Anschließend wird die in Ihrem Lösungs-Explorer in Visual Studio 2013 erstellte Projektdatei angezeigt.

Schritt 3) In diesem Schritt

Wir werden unserem Projekt eine Webdienstdatei hinzufügen

  1. Klicken Sie zunächst mit der rechten Maustaste auf die Projektdatei, wie unten gezeigt
  1. 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 einfach einen Namen für den Lerndienstdienst für die Webdienstnamensdatei an.

Der obige Schritt ruft ein Dialogfeld auf, in dem Sie den Namen der Webdienstdatei eingeben können. Geben Sie im folgenden Dialogfeld den Namen TutorialService als Dateinamen ein.

Schritt 4) Fügen Sie Ihrer Tutorial Service asmx-Datei den folgenden Code 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 dem SOAP-Header Sicherheitsanmeldeinformationen 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: -

  1. Wir erstellen jetzt eine separate Klasse namens AuthHeader vom Typ SoapHeader class . Wenn Sie ändern möchten, was im SOAP-Header übergeben wird, müssen Sie eine Klasse erstellen, die die integrierte SoapHeader-Klasse von .Net verwendet. Durch Anpassen des SOAPheader können wir jetzt beim Aufrufen des Webdienstes einen Benutzernamen und ein Kennwort übergeben.
  2. Wir definieren dann Variablen von 'UserName' und 'Password', die vom Typ string sind. Sie werden verwendet, um die Werte des Benutzernamens und des Kennworts zu speichern, die an den Webdienst übergeben werden.

Schritt 5) Als nächster Schritt muss der folgende Code zur gleichen TutorialService.asmx-Datei hinzugefügt werden . Dieser Code definiert tatsächlich die Funktion unseres Webdienstes. Diese Funktion gibt eine Zeichenfolge "Dies ist ein Guru99-Webdienst" an den Client zurück. Diesmal wird die Zeichenfolge 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);}eisereturn "This is a Guru99 Web service";}

Code Erläuterung: -

  1. Hier erstellen wir ein Objekt der AuthHeader-Klasse, das im vorherigen Schritt erstellt wurde. Dieses Objekt wird an unseren Guru99Webservice übergeben, in dem der Benutzername und das Passwort genau überprüft werden können.
  2. Das Attribut [SoapHeader] wird jetzt verwendet, um anzugeben, dass beim Aufrufen des Webdienstes der Benutzername und das Kennwort übergeben werden müssen.
  3. In diesem Codeblock untersuchen wir tatsächlich den Benutzernamen und das Kennwort, die beim Aufruf des Webdienstes übergeben wurden. Wenn der Benutzername gleich "Guru99" und das Passwort gleich "Guru99Password" ist, wird die Nachricht "Dies ist ein Guru99-Webdienst" an den Client übergeben. Andernfalls wird ein Fehler an den Client gesendet, wenn die falsche Benutzer-ID und das falsche Kennwort übergeben werden.

Wenn der Code erfolgreich ausgeführt wurde, wird die folgende Ausgabe angezeigt, wenn Sie Ihren Code im Browser ausführen.

Ausgabe:

Die obige Ausgabe wird angezeigt, wenn das Programm ausgeführt wird. Dies bedeutet, dass der Webdienst jetzt verfügbar ist. Klicken wir auf den Link Service Description.

Anhand der Dienstbeschreibung können Sie nun erkennen, dass der Benutzername und das Kennwort Elemente der WSDL-Datei sind. Diese Parameter müssen beim Aufrufen des Webdienstes gesendet werden.

Best Practices für die Sicherheit von Webdiensten

Im Folgenden sind die Sicherheitsaspekte aufgeführt, die bei der Arbeit mit Webdiensten beachtet werden sollten

  1. Überwachung und Protokollverwaltung - Verwenden Sie die Anwendungsprotokollierung, um alle Anforderungen zu protokollieren, die an die Webdienste gesendet werden. Dies gibt einen detaillierten Bericht darüber, wer den Webdienst aufgerufen hat, und kann bei der Auswirkungsanalyse helfen, wenn eine Sicherheitsverletzung auftritt.

  2. Anrufverlauf an den Webdienst - Versuchen Sie, den Anrufverlauf in Webdiensten zu notieren. Standardmäßig kann eine Anwendung mehrere Webdienstanforderungen mit Authentifizierungstoken aufrufen, die zwischen diesen Webdiensten übertragen werden. Alle Anrufe zwischen Webdiensten müssen überwacht und protokolliert werden.

  3. Vertrauliche Informationen - Nehmen Sie keine vertraulichen Informationen in Ihre Protokolleinträge auf, z. B. Passwörter, Kreditkartennummern oder andere vertrauliche Informationen. Wenn es ein Ereignis gibt, das diese Informationen enthält, muss es vor der Protokollierung verworfen werden.

  4. Geschäftsabläufe verfolgen - Verfolgen Sie wichtige Geschäftsvorgänge. Instrumentieren Sie Ihre Anwendung beispielsweise so, dass der Zugriff auf besonders vertrauliche Methoden und Geschäftslogik aufgezeichnet wird. Nehmen wir ein Beispiel für eine Online-Shopping-Anwendung. In einer typischen Anwendung gibt es mehrere Schritte, z. B. die Auswahl der zu kaufenden Artikel, die in den Warenkorb geladenen Artikel und dann den endgültigen Kauf. Dieser gesamte Geschäftsablauf muss vom Webdienst verfolgt werden.

  5. Richtige Authentifizierung - Die Authentifizierung ist der Mechanismus, mit dem die Clients ihre Identität mit dem Webdienst mithilfe eines bestimmten Satzes von Anmeldeinformationen ermitteln können, mit denen diese Identität nachgewiesen werden kann. Man sollte niemals die Benutzeranmeldeinformationen speichern. Wenn WS Security zum Aufrufen des Webdienstes verwendet wird, muss beachtet werden, dass der Webdienst die Anmeldeinformationen, die im SOAP-Header gesendet werden, nicht speichern sollte. Diese sollten vom Webdienst verworfen werden.

Zusammenfassung

  • SOAP bietet eine zusätzliche Schicht namens WS-Sicherheit, um zusätzliche Sicherheit beim Aufrufen von Webdiensten bereitzustellen.
  • Die WS-Sicherheit kann mit einem einfachen Benutzernamen oder Kennwort aufgerufen oder mit Binärzertifikaten zur Authentifizierung verwendet werden
  • Wir haben gesehen, dass wir in .Net den Webdienst so anpassen können, dass ein Benutzername und ein Kennwort als Teil des SOAP-Header-Elements übergeben werden.