Samouczek dotyczący zabezpieczeń usługi sieci Web (WS) z przykładem protokołu SOAP

Spisie treści:

Anonim

Co to jest WS Security?

WS Security to standard odnoszący się do bezpieczeństwa, gdy dane są wymieniane w ramach usługi sieci Web. Jest to kluczowa funkcja w SOAP, która sprawia, że ​​jest bardzo popularny do tworzenia usług internetowych.

Bezpieczeństwo to ważna funkcja w każdej aplikacji internetowej. Ponieważ prawie wszystkie aplikacje internetowe są narażone na kontakt z Internetem, zawsze istnieje ryzyko zagrożenia bezpieczeństwa aplikacji internetowych. Dlatego podczas tworzenia aplikacji internetowych zawsze zaleca się upewnienie się, że aplikacja jest projektowana i rozwijana z myślą o bezpieczeństwie.

W tym samouczku nauczysz się:

  • Zagrożenia bezpieczeństwa i środki zaradcze
  • Standardy bezpieczeństwa usług internetowych
  • Jak tworzyć bezpieczne usługi internetowe
  • Najlepsze praktyki w zakresie zabezpieczeń usług sieci Web

Zagrożenia bezpieczeństwa i środki zaradcze

Aby zrozumieć zagrożenia bezpieczeństwa, które mogą być wrogie dla aplikacji internetowej, przyjrzyjmy się prostemu scenariuszowi aplikacji internetowej i zobaczmy, jak ona działa pod względem bezpieczeństwa.

Jednym ze środków bezpieczeństwa dostępnych dla HTTP jest protokół HTTPS. HTTPS to bezpieczny sposób komunikacji między klientem a serwerem za pośrednictwem sieci WWW. HTTPS wykorzystuje warstwę Secure Sockets lub SSL do bezpiecznej komunikacji. Zarówno klient, jak i serwer będą mieć certyfikat cyfrowy, który będzie identyfikował się jako autentyczny, gdy zachodzi jakakolwiek komunikacja między klientem a serwerem.

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

  1. Klient wysyła żądanie do serwera za pośrednictwem certyfikatu klienta. Gdy serwer widzi certyfikat klienta, odnotowuje w swoim systemie pamięci podręcznej, aby wiedział, że odpowiedź powinna wrócić tylko do tego klienta.
  2. Następnie serwer uwierzytelnia się przed klientem, wysyłając swój certyfikat. Gwarantuje to, że 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 inni użytkownicy spróbują złamać zabezpieczenia i uzyskać wymagane dane, nie będą w stanie ich odczytać, ponieważ byłyby one zaszyfrowane.

Ale powyższy rodzaj zabezpieczenia nie zadziała we wszystkich sytuacjach. Może się zdarzyć, że klient będzie mógł rozmawiać z wieloma serwerami. Poniższy przykład pokazuje, że klient komunikuje się jednocześnie z bazą danych i serwerem WWW. W takich przypadkach nie wszystkie informacje mogą przejść przez protokół https.

W tym miejscu do akcji wkracza SOAP, aby przezwyciężyć takie przeszkody dzięki zastosowaniu specyfikacji WS Security. W tej specyfikacji wszystkie dane związane z zabezpieczeniami 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 zabezpieczeń, klucz ten można zdefiniować w elemencie nagłówka.
  2. Jeśli jakikolwiek element w treści SOAP jest zaszyfrowany, nagłówek będzie zawierał niezbędne klucze szyfrujące, aby wiadomość 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ść protokołu SOAP jest zaszyfrowana, może zostać odszyfrowana tylko przez serwer sieciowy, który obsługuje usługę sieciową. Dzieje się tak ze względu na sposób zaprojektowania 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 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 do SOAP.

Standardy bezpieczeństwa usług internetowych

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

Poświadczenia w nagłówku SOAP są zarządzane na 2 sposoby.

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

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

Poniższy diagram przedstawia przepływ sposobu działania modelu zabezpieczeń w WS Security

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

  1. Żądanie może zostać wysłane z klienta usługi sieci Web do usługi tokenu zabezpieczającego. Ta usługa może być pośrednią usługą sieciową, która została specjalnie zbudowana 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 sieci Web.
  3. Następnie klient usługi sieci Web wywołał usługę internetową, ale tym razem upewniając się, że token zabezpieczający jest osadzony w komunikacie SOAP.
  4. Następnie usługa sieci Web rozpoznaje komunikat SOAP z tokenem uwierzytelniania i może następnie skontaktować się z usługą tokenu zabezpieczającego, aby sprawdzić, czy token zabezpieczający jest autentyczny, czy nie.

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

Gdy wiadomość SOAP jest faktycznie przesyłana między klientami a serwerem, część wiadomości, która zawiera poświadczenia użytkownika, może wyglądać jak ta pokazana powyżej. Nazwa elementu wsse to specjalny element o nazwie zdefiniowany dla protokołu SOAP i oznacza, że ​​zawiera informacje oparte na zabezpieczeniach.

Jak tworzyć bezpieczne usługi internetowe

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

W naszym przykładzie utworzymy prostą usługę sieciową, która będzie używana do zwracania ciągu znaków do aplikacji wywołującej usługę sieciową. Ale tym razem, gdy usługa internetowa jest wywoływana, poświadczenia muszą zostać dostarczone 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 pustej aplikacji internetowej Asp.Net. W programie Visual Studio 2013 kliknij opcję menu Plik-> Nowy projekt.

Po kliknięciu opcji Nowy projekt program Visual Studio wyświetli kolejne okno dialogowe umożliwiające wybranie typu projektu i podanie niezbędnych szczegółów projektu. Zostanie to wyjaśnione w następnym kroku

Krok 2) Na tym etapie

  1. Upewnij się, że najpierw wybierzesz szablon sieci Web C # dla aplikacji sieci Web ASP.NET. Projekt musi być tego typu, aby można było utworzyć projekt usług internetowych. Wybierając tę ​​opcję, Visual Studio wykona niezbędne kroki, aby dodać wymagane pliki, które są wymagane przez dowolną aplikację internetową.
  2. Nadaj projektowi nazwę, która w naszym przypadku została nadana jako „ webservice.asmx. Następnie podaj lokalizację, w której będą przechowywane pliki projektu.

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

Krok 3) Na tym etapie

Zamierzamy dodać plik usługi sieci Web do naszego projektu

  1. Najpierw kliknij prawym przyciskiem myszy plik projektu, jak pokazano poniżej
  1. Po kliknięciu pliku projektu prawym przyciskiem myszy możesz wybrać opcję „Dodaj-> Usługa sieciowa (ASMX), aby dodać plik usługi sieciowej. Wystarczy podać nazwę usługi samouczka dla pliku nazwy usługi sieciowej”.

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

Krok 4) Dodaj następujący kod do pliku asmx usługi samouczka. Poniższy fragment kodu służy do dodawania 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.

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

Objaśnienie kodu: -

  1. Teraz tworzymy oddzielną klasę o nazwie AuthHeader, która jest typu SoapHeader . Ilekroć chcesz zmienić to, co jest przekazywane w nagłówku SOAP, należy utworzyć klasę, która używa wbudowanej klasy SoapHeader klasy .Net. Dostosowując nagłówek SOAP, mamy teraz możliwość przekazania „nazwy użytkownika” i „hasła”, gdy wywoływana jest usługa sieciowa.
  2. Następnie definiujemy zmienne „UserName” i „Password”, które są typu string. Będą używane do przechowywania wartości nazwy użytkownika i hasła, które są przekazywane do usługi sieciowej.

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

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

Objaśnienie kodu: -

  1. Tutaj tworzymy obiekt klasy AuthHeader, który został utworzony we wcześniejszym kroku. Ten obiekt zostanie przekazany do naszej usługi Guru99Webservice, w której będzie można dokładnie sprawdzić nazwę użytkownika i hasło.
  2. Atrybut [SoapHeader] jest teraz używany do określenia, że ​​wywołanie usługi sieci Web wymaga podania nazwy użytkownika i hasła.
  3. W tym bloku kodu faktycznie badamy nazwę użytkownika i hasło przekazywane podczas wywoływania usługi sieciowej. Jeśli nazwa użytkownika to „Guru99”, a hasło to „Guru99Password”, do klienta przekazywany jest 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, następujące dane wyjściowe zostaną wyświetlone po uruchomieniu kodu w przeglądarce.

Wynik:

Powyższe dane wyjściowe są wyświetlane po uruchomieniu programu, co oznacza, że ​​usługa sieci Web jest teraz dostępna. Kliknij łącze Opis usługi.

Z opisu usługi będzie można teraz zobaczyć, że nazwa użytkownika i hasło są elementami pliku WSDL. Te parametry muszą być wysyłane, gdy usługa internetowa jest wywoływana.

Najlepsze praktyki w zakresie zabezpieczeń usług sieci Web

Poniżej przedstawiono kwestie dotyczące bezpieczeństwa, na które należy zwrócić uwagę podczas pracy z usługami sieci Web

  1. Inspekcja i zarządzanie dziennikami - użyj rejestrowania aplikacji do rejestrowania wszystkich żądań przychodzących do usług internetowych. Daje to szczegółowy raport o tym, kto wywołał usługę sieciową i może pomóc w analizie wpływu, jeśli wystąpi jakiekolwiek naruszenie bezpieczeństwa.

  2. Przepływ połączeń z usługą internetową - spróbuj zanotować przepływ połączeń w usługach internetowych. Domyślnie aplikacja może wywoływać wiele żądań usług internetowych z tokenami uwierzytelniania przekazywanymi między tymi usługami internetowymi. Wszystkie połączenia między usługami internetowymi muszą być monitorowane i rejestrowane.

  3. Informacje poufne - nie umieszczaj w dziennikach informacji poufnych, takich jak hasła lub numery kart kredytowych, ani żadnych innych informacji poufnych. Jeśli istnieje zdarzenie, które zawiera te informacje, należy je odrzucić przed zalogowaniem.

  4. Śledź operacje biznesowe - śledź istotne operacje biznesowe. Na przykład, spersonalizuj 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. Typowa aplikacja składa się z wielu kroków, takich jak wybór towarów do zakupu, ładowanie towarów do koszyka, a następnie ostateczny zakup. Cały ten biznesowy przepływ pracy musi być śledzony przez usługę internetową.

  5. Właściwe uwierzytelnianie - uwierzytelnianie to mechanizm, za pomocą którego klienci mogą ustalić swoją tożsamość z usługą internetową przy użyciu określonego zestawu poświadczeń, które mogą potwierdzić tę tożsamość. Nigdy nie należy przechowywać poświadczeń użytkownika, a zatem jeśli do wywołania usługi sieciowej używany jest WS Security, należy zauważyć, że usługa sieciowa nie powinna przechowywać poświadczeń, które są wysyłane w nagłówku SOAP. Powinny one zostać odrzucone przez usługę internetową.

Podsumowanie

  • SOAP zapewnia dodatkową warstwę o nazwie WS Security, która zapewnia dodatkowe bezpieczeństwo podczas wykonywania połączeń z usługami sieci Web.
  • Usługa WS Security może zostać wywołana przy użyciu prostej nazwy użytkownika lub hasła lub może być używana z certyfikatami binarnymi do uwierzytelniania
  • Widzieliśmy, że w .Net możemy dostosować usługę sieci Web tak, aby nazwa użytkownika i hasło były przekazywane jako część elementu nagłówka SOAP.