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.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: