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

Was ist WS-Sicherheit?

WS Security ist ein Standard, der sich mit der Sicherheit beim Datenaustausch im Rahmen eines Webdienstes befasst. Dies ist eine Schlüsselfunktion von SOAP, die es für die Erstellung von Webdiensten sehr beliebt macht.

Sicherheit ist ein wichtiges Merkmal 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 webbasierter Anwendungen immer empfohlen, sicherzustellen, dass die Anwendung unter Berücksichtigung der Sicherheit entworfen und entwickelt wird.

Sicherheitsbedrohungen und Gegenmaßnahmen

Um die Sicherheitsbedrohungen zu verstehen, die für eine Webanwendung schädlich sein 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 nutzt die Secure Sockets-Schicht oder SSL für eine sichere Kommunikation. Sowohl der Client als auch der Server verfügen über ein digitales Zertifikat, um sich bei jeder Kommunikation zwischen dem Client und dem Server als echt zu identifizieren.

Sicherheitsbedrohungen und Gegenmaßnahmen

Bei einer Standard-HTTPS-Kommunikation zwischen Client und Server finden folgende Schritte statt

  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 gegenüber dem Client, indem er sein Zertifikat sendet. Dadurch wird sichergestellt, dass der Client mit dem richtigen Server kommuniziert.
  3. Die gesamte Kommunikation zwischen Client und Server erfolgt danach verschlüsselt. Dies stellt sicher, dass andere Benutzer, wenn sie versuchen, die Sicherheit zu durchbrechen und an die erforderlichen Daten zu gelangen, diese nicht lesen können, da sie verschlüsselt wären.

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

Sicherheitsbedrohungen und Gegenmaßnahmen

Hier kommt SOAP ins Spiel, um solche Hindernisse zu überwinden, indem die WS-Sicherheitsspezifikation implementiert wird. 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-Körper mit einem Sicherheitsschlüssel signiert wurde, kann dieser Schlüssel im Header-Element definiert werden.
  2. Wenn ein Element im SOAP-Körper verschlüsselt ist, enthält der Header die erforderlichen Verschlüsselungsschlüssel, damit die Nachricht entschlüsselt werden kann, wenn sie das Ziel erreicht.

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

  • 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 weitergeleitet und kann nicht entschlüsselt werden, da die Datenbank nicht über die entsprechenden Mechanismen verfügt.
  • Erst wenn die Anfrage tatsächlich als SOAP-Protokoll beim Webserver ankommt, kann dieser die Nachricht entschlüsseln und die entsprechende Antwort an den Client zurücksenden.

In den folgenden Themen werden wir sehen, wie der WS-Sicherheitsstandard eingesetzt werden kann SOAP.

Web-Service-Sicherheitsstandards

Wie im vorherigen Abschnitt erläutert, geht es beim WS-Security-Standard darum, die Sicherheitsdefinition in den SOAP-Header aufzunehmen.

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, einen binären Token über den 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

Web-Service-Sicherheitsstandards

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

  1. Vom Webdienst-Client kann eine Anfrage an den Security Token Service gesendet werden. Bei diesem Dienst kann es sich um einen Zwischen-Webdienst handeln, der speziell für die Bereitstellung von Benutzernamen/Passwörtern oder Zertifikaten für den eigentlichen SOAP-Webdienst entwickelt wurde.
  2. Das Sicherheitstoken wird dann an den Webdienst-Client übergeben.
  3. Der Webdienst-Client rief dann den Webdienst auf, stellte jedoch dieses Mal sicher, dass das Sicherheitstoken in die SOAP-Nachricht eingebettet ist.
  4. 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 Ausschnitt zeigt das Format des Authentifizierungsteils, der Teil des WSDL-Dokuments ist. Basierend auf dem folgenden Snippet enthält die SOAP-Nachricht nun zwei zusätzliche Elemente, eines ist der Benutzername und das andere 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 den Clients und dem Server weitergeleitet wird, könnte der Teil der Nachricht, der die Benutzeranmeldeinformationen enthält, wie oben gezeigt aussehen. Der wsse-Elementname ist ein spezieller Elementname, der für SOAP definiert ist und bedeutet, dass er sicherheitsbasierte Informationen enthält.

So erstellen Sie sichere Webdienste

Schauen wir uns nun ein Beispiel für die Sicherheit von SOAP-Webdiensten an. Wir werden eine Webdienstsicherheit auf der Grundlage des weiter oben im SOAP-Kapitel gezeigten Beispiels aufbauen und eine Sicherheitsschicht hinzufügen.

In unserem Beispiel erstellen wir einen einfachen Webdienst, der verwendet wird, um eine Zeichenfolge an die Anwendung zurückzugeben, die den Webdienst aufruft. Aber dieses Mal müssen beim Aufruf des Webdienstes die Anmeldeinformationen an den aufrufenden Dienst übermittelt werden. Führen Sie die folgenden Schritte aus, um unseren SOAP-Webdienst zu erstellen und ihm 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.

Erstellen Sie sichere Webdienste

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 angeben können. Dies wird im nächsten Schritt erklärt.

Schritt 2) In diesem Schritt

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

Erstellen Sie sichere Webdienste

Sobald dies erledigt ist, sehen Sie die erstellte Projektdatei in Ihrem Lösungs-Explorer in Visual Studio 2013.

Erstellen Sie sichere Webdienste

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

Erstellen Sie sichere Webdienste

  1. Sobald Sie mit der rechten Maustaste auf die Projektdatei klicken, haben Sie die Möglichkeit, die Option „Hinzufügen->Webdienst (ASMX)“ auszuwählen, um eine Webdienstdatei hinzuzufügen. Geben Sie einfach den Namen „Tutorial Service“ für die Webdienst-Namensdatei an.

    Erstellen Sie sichere Webdienste

Der obige Schritt öffnet ein Dialogfeld, in das Sie den Namen der Webdienstdatei eingeben können. Geben Sie daher im folgenden Dialogfeld den Namen „TutorialService“ als Dateinamen ein.

Erstellen Sie sichere Webdienste

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.

Erstellen Sie sichere Webdienste

		return "This is a Guru99 Web Service";
	}
	
	public class AuthHeader : SoapHeader
	{
		public string UserName;
		public string Password;

	}
}

Code-Erklärung:-

  1. Wir erstellen jetzt eine separate Klasse namens AuthHeader was vom typ ist SoapHeader-Klasse. Wann immer 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 die Anpassung des SOAPheaders haben wir nun die Möglichkeit, beim Aufruf des Webdienstes einen „Benutzernamen“ und ein „Passwort“ zu übergeben.
  2. 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-Datei. Dieser Code definiert eigentlich die Funktion unseres Webservices. 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.

Erstellen Sie sichere Webdienste

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);
		}
		eise
		return "This is a Guru99 Web service";
	}

Code-Erklärung:-

  1. 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.
  2. Das Attribut [SoapHeader] wird nun verwendet, um festzulegen, dass beim Aufruf des Webdienstes der Benutzername und das Passwort übergeben werden müssen.
  3. In diesem Codeblock untersuchen wir tatsächlich den Benutzernamen und das Passwort, die beim Aufruf des Webdienstes übergeben werden. Wenn der Benutzername „Guru99“ und das Passwort „Guru99Password“ lautet, wird die Meldung „Dies ist ein Guru99-Webdienst“ an den Client weitergeleitet. Andernfalls wird eine Fehlermeldung an den Client gesendet, wenn die falsche Benutzer-ID und das falsche Passwort übergeben werden.

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

Ausgang:

Erstellen Sie sichere Webdienste

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

Erstellen Sie sichere Webdienste

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 finden Sie die Sicherheitsüberlegungen, die bei der Arbeit mit Webdiensten beachtet werden sollten

1. Auditing und Protokollverwaltung – Verwenden Sie die Anwendungsprotokollierung, um alle Anfragen zu protokollieren, die an die Webdienste eingehen. Dadurch erhalten Sie einen detaillierten Bericht darüber, wer den Webdienst aufgerufen hat, und können bei der Auswirkungsanalyse hilfreich sein, wenn eine Sicherheitsverletzung auftritt.

2. Fluss der Anrufe an den Webdienst – Versuchen Sie, den Anruffluss in Webdiensten zu beobachten. Standardmäßig könnte eine Anwendung mehrere Webdienste anfordern, wobei Authentifizierungstoken zwischen diesen Webdiensten übergeben werden. Alle Anrufe zwischen Webdiensten müssen überwacht und protokolliert werden.

3. Sensible Informationen – Geben Sie in Ihren Protokolleinträgen keine sensiblen Informationen wie Passwörter, Kreditkartennummern oder andere vertrauliche Informationen an. Wenn ein Ereignis derartige Informationen enthält, müssen diese vor der Protokollierung gelöscht werden.

4. Verfolgen Sie das Geschäft Operations – Verfolgen Sie wichtige Geschäftsvorgänge. Instrumentieren Sie Ihre Anwendung beispielsweise so, dass der Zugriff auf besonders sensible Methoden und Geschäftslogik aufgezeichnet wird. Nehmen wir als Beispiel eine Online-Shopping-Anwendung. Eine typische Anwendung besteht aus mehreren Schritten, wie beispielsweise der Auswahl der zu kaufenden Artikel, dem Laden der Artikel in den Einkaufswagen und dem endgültigen Kauf. Dieser gesamte Geschäftsablauf muss vom Webdienst verfolgt werden.

5. Korrekte Authentifizierung – Authentifizierung ist der Mechanismus, mit dem die Clients ihre Identität beim Webdienst mithilfe eines bestimmten Satzes von Anmeldeinformationen feststellen können, die diese Identität nachweisen können. Die Benutzeranmeldeinformationen sollten niemals gespeichert werden. Wenn daher 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 bei Aufrufen von Webdiensten zu bieten.
  • Die WS Security kann mit einem einfachen Benutzernamen oder Passwort aufgerufen oder mit Binärzertifikaten zur Authentifizierung verwendet werden
  • Das haben wir gesehen .Netz Wir können den Webdienst so anpassen, dass ein Benutzername und ein Kennwort als Teil des SOAP-Header-Elements übergeben werden.