Samouczek dotyczący bezpieczeństwa usług internetowych (WS) z przykładem SOAP

Co to jest bezpieczeństwo WS?

WS Security to standard dotyczący bezpieczeństwa podczas wymiany danych w ramach usługi internetowej. Jest to kluczowa funkcja protokołu SOAP, która sprawia, że ​​jest on bardzo popularny przy tworzeniu usług internetowych.

Bezpieczeństwo jest ważną cechą każdej aplikacji internetowej. Ponieważ prawie wszystkie aplikacje internetowe są dostępne w Internecie, zawsze istnieje ryzyko zagrożenia bezpieczeństwa aplikacji internetowych. Dlatego też podczas opracowywania aplikacji internetowych zawsze zaleca się upewnienie się, że aplikacja jest projektowana i rozwijana z myślą o bezpieczeństwie.

Zagrożenia bezpieczeństwa i środki zaradcze

Aby zrozumieć zagrożenia bezpieczeństwa, które mogą być wrogie aplikacji internetowej, spójrzmy na prosty scenariusz aplikacji internetowej i zobaczmy, jak ona działa pod względem bezpieczeństwa.

Jednym ze środków bezpieczeństwa dostępnych dla protokołu HTTP jest protokół HTTPS. HTTPS to bezpieczny sposób komunikacji pomiędzy klientem a serwerem przez Internet. HTTPS wykorzystuje warstwę Secure Sockets lub SSL do bezpiecznej komunikacji. Zarówno klient, jak i serwer będą posiadać certyfikat cyfrowy umożliwiający identyfikację jako autentyczną w przypadku jakiejkolwiek komunikacji między klientem a serwerem.

Zagrożenia bezpieczeństwa i środki zaradcze

W standardowej komunikacji HTTPS pomiędzy klientem a serwerem wykonywane są następujące kroki

  1. Klient wysyła żądanie do serwera za pośrednictwem certyfikatu klienta. Kiedy serwer widzi certyfikat klienta, zapisuje notatkę w swoim systemie pamięci podręcznej, aby wiedzieć, że odpowiedź powinna wrócić tylko do tego klienta.
  2. Następnie serwer uwierzytelnia się u klienta, wysyłając swój certyfikat. Dzięki temu klient komunikuje się z właściwym serwerem.
  3. Cała późniejsza komunikacja między klientem a serwerem jest szyfrowana. Gwarantuje to, że jeśli jakikolwiek inny użytkownik spróbuje złamać zabezpieczenia i zdobyć wymagane dane, nie będzie mógł ich odczytać, ponieważ byłyby one zaszyfrowane.

Jednak powyższy rodzaj zabezpieczeń nie sprawdzi się we wszystkich sytuacjach. Może nadejść moment, w którym klient będzie mógł rozmawiać z wieloma serwerami. Przykład podany poniżej pokazuje, że klient rozmawia jednocześnie z bazą danych i serwerem WWW. W takich przypadkach nie wszystkie informacje mogą przejść przez protokół https.

Zagrożenia bezpieczeństwa i środki zaradcze

W tym miejscu do akcji wkracza SOAP, aby pokonać takie przeszkody, stosując specyfikację WS Security. Dzięki tej specyfikacji wszystkie dane związane z bezpieczeństwem są zdefiniowane w elemencie nagłówka SOAP.

Element nagłówka może zawierać poniższe informacje

  1. Jeśli wiadomość w treści protokołu SOAP została podpisana dowolnym kluczem bezpieczeństwa, klucz ten można zdefiniować w elemencie nagłówka.
  2. Jeśli jakikolwiek element treści protokołu SOAP jest zaszyfrowany, nagłówek będzie zawierał niezbędne klucze szyfrowania, dzięki czemu wiadomość będzie mogła zostać odszyfrowana po dotarciu do miejsca docelowego.

W środowiskach wieloserwerowych powyższa technika uwierzytelniania SOAP pomaga w następujący sposób.

  • Ponieważ treść SOAP jest zaszyfrowana, będzie mogła zostać odszyfrowana jedynie przez serwer WWW, na którym znajduje się usługa internetowa. Dzieje się tak ze względu na konstrukcję protokołu SOAP.
  • Załóżmy, że jeśli wiadomość jest przekazywana do serwera bazy danych w żądaniu HTTP, nie można jej odszyfrować, ponieważ baza danych nie ma odpowiednich mechanizmów, aby to zrobić.
  • Dopiero gdy żądanie faktycznie dotrze do serwera WWW jako protokół SOAP, będzie on w stanie odszyfrować wiadomość i wysłać odpowiednią odpowiedź z powrotem do klienta.

W kolejnych tematach zobaczymy, w jaki sposób można wykorzystać standard WS Security SOAP.

Standardy bezpieczeństwa usług internetowych

Jak omówiono we wcześniejszej sekcji, standard WS-Security opiera się na umieszczeniu definicji zabezpieczeń w nagłówku SOAP.

Poświadczeniami w nagłówku SOAP zarządza się na dwa sposoby.

Najpierw definiuje specjalny element o nazwie UsernameToken. Służy do przekazywania nazwy użytkownika i hasła do usługi internetowej.

Innym sposobem jest użycie tokenu binarnego za pośrednictwem tokenu BinarySecurityToken. Jest to wykorzystywane w sytuacjach, w których używane są techniki szyfrowania, takie jak Kerberos lub X.509.

Poniższy diagram przedstawia przebieg działania modelu zabezpieczeń w programie WS Security

Standardy bezpieczeństwa usług internetowych

Poniżej znajdują się kroki, które mają miejsce w powyższym przepływie pracy

  1. Żądanie można wysłać z klienta usługi sieci Web do usługi tokenu zabezpieczającego. Ta usługa może być pośrednią usługą sieciową, zbudowaną specjalnie w celu dostarczania nazw użytkowników/haseł lub certyfikatów do rzeczywistej usługi sieciowej SOAP.
  2. Token zabezpieczający jest następnie przekazywany do klienta usługi internetowej.
  3. Następnie klient usługi sieci Web wywołał usługę sieci Web, ale tym razem upewniając się, że token zabezpieczający jest osadzony w komunikacie SOAP.
  4. Usługa sieci Web rozpoznaje wówczas komunikat SOAP zawierający token uwierzytelniania i może skontaktować się z usługą tokenu zabezpieczającego, aby sprawdzić, czy token zabezpieczający jest autentyczny, czy nie.

Poniższy fragment przedstawia format części uwierzytelniającej, która jest częścią dokumentu WSDL. Teraz, w oparciu o poniższy fragment, wiadomość SOAP będzie zawierać 2 dodatkowe elementy, jeden to nazwa użytkownika, a drugi to hasło.

<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>

Kiedy komunikat SOAP jest rzeczywiście przesyłany między klientami a serwerem, część komunikatu zawierająca poświadczenia użytkownika może wyglądać jak pokazana powyżej. Nazwa elementu wsse to specjalny element o nazwie zdefiniowany dla protokołu SOAP i oznacza, że ​​zawiera informacje dotyczące bezpieczeństwa.

Jak budować bezpieczne usługi internetowe

Przyjrzyjmy się teraz przykładowi bezpieczeństwa usługi internetowej SOAP. Zbudujemy zabezpieczenie usługi internetowej na przykładzie zaprezentowanym wcześniej w rozdziale SOAP i dodamy do niego warstwę bezpieczeństwa.

W naszym przykładzie stworzymy prostą usługę WWW, która posłuży do zwrócenia ciągu znaków do aplikacji wywołującej usługę WWW. Ale tym razem, gdy wywoływana jest usługa internetowa, należy dostarczyć poświadczenia do usługi wywołującej. Wykonajmy poniższe kroki, aby utworzyć naszą usługę sieciową SOAP i dodać do niej definicję zabezpieczeń.

Krok 1) Pierwszym krokiem jest utworzenie pustego pliku Asp.Net Aplikacja internetowa. W programie Visual Studio 2013 kliknij opcję menu File->New project.

Twórz bezpieczne usługi internetowe

Po kliknięciu opcji Nowy projekt, Visual Studio wyświetli kolejne okno dialogowe do wyboru typu projektu i podania niezbędnych szczegółów projektu. Jest to wyjaśnione w następnym kroku

Krok 2) W tym etapie,

  1. Upewnij się, że najpierw wybrałeś C# szablon sieciowy dla aplikacji sieciowej ASP.NET. Projekt musi być tego typu, aby utworzyć projekt usług sieciowych. Wybierając tę ​​opcję, Visual Studio wykona niezbędne kroki, aby dodać wymagane pliki, które są wymagane przez dowolną aplikację sieciową.
  2. Podaj nazwę swojego projektu, która w naszym przypadku została podana jako „webservice.asmx.Następnie pamiętaj o podaniu lokalizacji, w której będą przechowywane pliki projektu.

Twórz bezpieczne usługi internetowe

Po zakończeniu zobaczysz plik projektu utworzony w eksploratorze rozwiązań w programie Visual Studio 2013.

Twórz bezpieczne usługi internetowe

Krok 3) W tym etapie,

Zamierzamy dodać plik usługi internetowej do naszego projektu

  1. Najpierw kliknij prawym przyciskiem myszy plik projektu, jak pokazano poniżej

Twórz bezpieczne usługi internetowe

  1. Po kliknięciu prawym przyciskiem myszy pliku projektu masz możliwość wybrania opcji „Dodaj->Web Service (ASMX), aby dodać plik usługi internetowej. Wystarczy podać nazwę usługi samouczka dla pliku nazwy usługi internetowej.

    Twórz bezpieczne usługi internetowe

Powyższy krok spowoduje wyświetlenie okna dialogowego, w którym można wprowadzić nazwę pliku usługi sieciowej. W poniższym oknie dialogowym wprowadź nazwę TutorialService jako nazwę pliku.

Twórz bezpieczne usługi internetowe

Krok 4) Dodaj następujący kod do pliku asmx usługi Tutorial Service. Poniższy fragment kodu jest używany do dodania niestandardowej klasy, która będzie używana do zmiany nagłówka SOAP podczas generowania komunikatu SOAP. Ponieważ teraz chcemy dodać poświadczenia bezpieczeństwa do nagłówka SOAP, ten krok jest wymagany.

Twórz bezpieczne usługi internetowe

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

	}
}

Wyjaśnienie kodu: -

  1. Tworzymy teraz osobną klasę o nazwie Nagłówek uwierzytelniania który jest typu Klasa SoapHeader. Ilekroć chcesz zmienić to, co jest przekazywane w nagłówku SOAP, musisz utworzyć klasę, która korzysta z wbudowanej klasy SoapHeader .Net. Dostosowując nagłówek SOAP, możemy teraz przekazać „Nazwę użytkownika” i „Hasło” podczas wywoływania usługi internetowej.
  2. Następnie definiujemy zmienne „UserName” i „Password”, które są typu string. Będą one używane do przechowywania wartości nazwy użytkownika i hasła, które są przekazywane do usługi internetowej.

Krok 5) W następnym kroku należy dodać do tego samego kodu następujący kod Plik TutorialService.asmx. Ten kod faktycznie definiuje funkcję naszego serwisu internetowego. Ta funkcja zwraca do klienta ciąg znaków „To jest usługa internetowa Guru99”. Ale tym razem ciąg zostanie zwrócony tylko wtedy, gdy aplikacja kliencka przekaże poświadczenia do usługi internetowej.

Twórz bezpieczne usługi internetowe

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";
	}

Wyjaśnienie kodu: -

  1. Tworzymy tutaj obiekt klasy AuthHeader, który został utworzony we wcześniejszym kroku. Obiekt ten zostanie przekazany naszemu Serwis internetowy Guru99 w którym można dokładnie sprawdzić nazwę użytkownika i hasło.
  2. Atrybut [SoapHeader] jest teraz używany do określenia, że ​​po wywołaniu usługi sieci Web należy przekazać nazwę użytkownika i hasło.
  3. W tym bloku kodu faktycznie sprawdzamy nazwę użytkownika i hasło przekazywane podczas wywoływania usługi internetowej. Jeśli nazwa użytkownika to „Guru99”, a hasło to „Guru99Password”, do klienta zostanie przesłany komunikat „To jest usługa sieciowa Guru99”. W przeciwnym razie do klienta zostanie wysłany błąd, jeśli zostanie przekazany nieprawidłowy identyfikator użytkownika i hasło.

Jeśli kod zostanie wykonany pomyślnie, po uruchomieniu kodu w przeglądarce zostanie wyświetlony następujący komunikat.

Wyjście:

Twórz bezpieczne usługi internetowe

Powyższe dane wyjściowe są wyświetlane po uruchomieniu programu, co oznacza, że ​​usługa internetowa jest już dostępna. Kliknijmy usługę Descriptłącze jonowe.

Twórz bezpieczne usługi internetowe

Z opisu usługi będziesz mógł teraz zobaczyć, że nazwa użytkownika i hasło są elementami wsdl plik. Parametry te należy przesłać w momencie wywołania usługi internetowej.

Najlepsze praktyki dotyczące bezpieczeństwa usług internetowych

Poniżej przedstawiono kwestie bezpieczeństwa, które należy wziąć pod uwagę podczas pracy z usługami sieciowymi

1. Audyt i zarządzanie logami – Użyj logowania aplikacji do rejestrowania wszystkich żądań przychodzących do usług sieciowych. Daje to szczegółowy raport na temat tego, kto wywołał usługę internetową i może pomóc w analizie wpływu w przypadku wystąpienia jakiegokolwiek naruszenia bezpieczeństwa.

2. Przepływ połączeń do serwisu WWW – Spróbuj zanotować przepływ połączeń w usługach internetowych. Domyślnie aplikacja może wywołać wiele żądań usług internetowych z tokenami uwierzytelniającymi przekazywanymi między tymi usługami internetowymi. Wszystkie połączenia między usługami internetowymi muszą być monitorowane i rejestrowane.

3. Informacje wrażliwe – Nie umieszczaj w swoich wpisach w dzienniku poufnych informacji, takich jak hasła, numery kart kredytowych lub jakiekolwiek inne poufne informacje. Jeśli istnieje zdarzenie, które zawiera jakiekolwiek z tych informacji, należy je usunąć przed zalogowaniem.

4. Śledź biznes Operanych – Śledź istotne operacje biznesowe. Na przykład, instrumentuj swoją aplikację, aby rejestrowała dostęp do szczególnie wrażliwych metod i logiki biznesowej. Weźmy przykład aplikacji do zakupów online. W typowej aplikacji występuje wiele kroków, takich jak wybór przedmiotów do kupienia, załadowanie przedmiotów do koszyka, a następnie ostateczny zakup. Cały ten przepływ pracy biznesowej musi być śledzony przez usługę internetową.

5. Prawidłowe uwierzytelnienie – Uwierzytelnianie to mechanizm, dzięki któremu klienci mogą ustalić swoją tożsamość w serwisie internetowym przy użyciu określonego zestawu danych uwierzytelniających, które mogą potwierdzić tę tożsamość. Nigdy nie należy przechowywać poświadczeń użytkownika, dlatego też, jeśli do wywołania usługi sieciowej używany jest program WS Security, należy zauważyć, że usługa sieciowa nie powinna przechowywać poświadczeń przesyłanych w nagłówku SOAP. Powinny one zostać odrzucone przez usługę internetową.

Podsumowanie

  • SOAP zapewnia dodatkową warstwę zwaną WS Security, zapewniającą dodatkowe bezpieczeństwo podczas wykonywania połączeń z usługami sieciowymi.
  • WS Security można wywołać za pomocą prostej nazwy użytkownika lub hasła lub można go używać z certyfikatami binarnymi do uwierzytelniania
  • Widzieliśmy to w . Netto możemy dostosować usługę internetową tak, aby nazwa użytkownika i hasło były przekazywane jako część nagłówka SOAP.