Przykład zabezpieczeń usług sieciowych (WS) z protokołem SOAP
⚡ Inteligentne podsumowanie
Web Service Security (WS) to standard, który chroni dane wymieniane podczas wywołania usługi sieciowej SOAP. Ten materiał omawia zagrożenia bezpieczeństwa i środki zaradcze, standardy WS-Security, tworzenie bezpiecznej usługi sieciowej z poświadczeniami oraz najlepsze praktyki w zakresie bezpieczeństwa usług sieciowych.
Co to jest bezpieczeństwo WS?
WS Security to standard, który zapewnia bezpieczeństwo podczas wymiany danych w ramach usługi sieciowej. Jest to kluczowa cecha protokołu SOAP, która sprawia, że jest on bardzo popularny w tworzeniu usług sieciowych.
Bezpieczeństwo jest ważną cechą każdej aplikacji webowej. Ponieważ niemal wszystkie aplikacje webowe są narażone na działanie internetu, zawsze istnieje ryzyko zagrożenia bezpieczeństwa aplikacji webowych. Dlatego podczas tworzeniaping W przypadku aplikacji internetowych zawsze zaleca się zadbanie o to, aby aplikacja została zaprojektowana i opracowana z uwzględnieniem kwestii bezpieczeństwa.
Zagrożenia bezpieczeństwa i środki zaradcze
Aby zrozumieć zagrożenia bezpieczeństwa, jakie mogą spotkać aplikację internetową, przyjrzyjmy się prostemu scenariuszowi aplikacji internetowej i sprawdźmy, jak działa ona pod względem bezpieczeństwa.
Jednym z zabezpieczeń dostępnych dla protokołu HTTP jest protokół HTTPS. HTTPS to bezpieczny sposób komunikacji między klientem a serwerem w sieci. HTTPS wykorzystuje protokół Secure Sockets Layer (SSL) do bezpiecznej komunikacji. Zarówno klient, jak i serwer będą posiadać certyfikat cyfrowy, który będzie ich identyfikował jako autentycznych podczas każdej komunikacji między klientem a serwerem.
W standardowej komunikacji HTTPS pomiędzy klientem a serwerem mają miejsce następujące kroki:
- 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.
- Następnie serwer uwierzytelnia się u klienta, wysyłając swój certyfikat. Dzięki temu klient komunikuje się z właściwym serwerem.
- Cała późniejsza komunikacja między klientem a serwerem jest szyfrowana. Dzięki temu, jeśli inni użytkownicy spróbują złamać zabezpieczenia i uzyskać dostęp do wymaganych danych, nie będą mogli ich odczytać, ponieważ będą one zaszyfrowane.
Jednak powyższy rodzaj zabezpieczeń nie będzie działał we wszystkich sytuacjach. Może się zdarzyć, że klient będzie mógł komunikować się z wieloma serwerami. Poniższy przykład pokazuje klienta komunikującego się jednocześnie z bazą danych i serwerem WWW. W takich przypadkach nie wszystkie informacje mogą zostać przesłane przez protokół HTTPS.
W tym miejscu do akcji wkracza protokół SOAP, aby pokonać te przeszkody, wykorzystują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:
- 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.
- Jeśli jakikolwiek element w treści protokołu SOAP jest zaszyfrowany, nagłówek będzie zawierał niezbędne klucze szyfrujące, dzięki którym wiadomość będzie można odszyfrować po dotarciu do miejsca docelowego.
W środowisku wieloserwerowym powyższa technika uwierzytelniania SOAP przynosi następujące korzyści:
- 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 wiadomość została przekazana do serwera bazy danych w żądaniu HTTP; nie można jej odszyfrować, ponieważ baza danych nie dysponuje odpowiednimi mechanizmami do tego celu.
- Dopiero gdy żądanie dotrze do serwera WWW jako protokół SOAP, będzie on mógł odszyfrować wiadomość i odesłać odpowiednią odpowiedź do klienta.
W kolejnych tematach zobaczymy, jak 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 zawarciu definicji zabezpieczeń w nagłówku SOAP. Poświadczenia w nagłówku SOAP są zarządzane na dwa sposoby.
Po pierwsze, definiuje specjalny element o nazwie UsernameToken. Służy on do przekazywania nazwy użytkownika i hasła do usługi sieciowej. Innym sposobem jest użycie tokena binarnego za pośrednictwem BinarySecurityToken. Jest on używany w sytuacjach, w których stosowane są techniki szyfrowania, takie jak Kerberos lub X.509.
Poniższy diagram przedstawia schemat działania modelu zabezpieczeń w WS Security.
Poniżej przedstawiono kroki, które mają miejsce w powyższym przepływie pracy:
- Żądanie może zostać wysłane z klienta usługi sieciowej do usługi tokenu bezpieczeństwa. Usługa ta może być pośrednią usługą sieciową, stworzoną specjalnie w celu dostarczania nazw użytkowników, haseł lub certyfikatów do rzeczywistej usługi sieciowej SOAP.
- Token zabezpieczający jest następnie przekazywany do klienta usługi internetowej.
- Klient usługi sieciowej wywołuje następnie usługę sieciową, ale tym razem upewniając się, że token bezpieczeństwa jest osadzony w komunikacie SOAP.
- 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 kodu przedstawia format części uwierzytelniającej, która jest częścią dokumentu WSDL. Na podstawie poniższego fragmentu kodu, komunikat 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>
Podczas rzeczywistego przesyłania komunikatu SOAP między klientami a serwerem, część komunikatu zawierająca dane uwierzytelniające użytkownika może wyglądać jak ta pokazana powyżej. Nazwa elementu wsse to specjalna nazwa elementu zdefiniowana dla protokołu SOAP, która oznacza, że zawiera on informacje dotyczące bezpieczeństwa.
Jak budować bezpieczne usługi internetowe
Przyjrzyjmy się teraz przykładowi zabezpieczeń usługi sieciowej SOAP. Zbudujemy zabezpieczenie usługi sieciowej na podstawie przykładu zaprezentowanego wcześniej w rozdziale o 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ą. Tym razem jednak, po wywołaniu usługi sieciowej, należy podać dane uwierzytelniające usłudze wywołującej. Wykonajmy poniższe kroki, aby utworzyć 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.
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,
- Upewnij się, że najpierw wybrałeś C# Szablon internetowy dla aplikacji internetowej ASP.NET. Projekt musi być tego typu, aby utworzyć projekt usług internetowych. Po wybraniu tej opcji program Visual Studio wykona niezbędne kroki w celu dodania wymaganych plików, które są potrzebne dowolnej aplikacji internetowej.
- Podaj nazwę swojego projektu, która w naszym przypadku została podana jako „usługa internetowa.asmx.” Następnie upewnij się, że podałeś 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) W tym kroku dodamy plik usługi sieciowej do naszego projektu.
- Najpierw kliknij prawym przyciskiem myszy plik projektu, jak pokazano poniżej.
- Po kliknięciu prawym przyciskiem myszy pliku projektu możesz wybrać opcję „Dodaj->Usługa sieciowa (ASMX)”, aby dodać plik usługi sieciowej. Wystarczy podać nazwę usługi samouczka dla pliku usługi sieciowej.
Powyższy krok spowoduje wyświetlenie okna dialogowego, w którym można wprowadzić nazwę pliku usługi sieciowej. W poniższym oknie dialogowym należy wpisać nazwę TutorialService jako nazwę pliku.
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.
return "This is a Guru99 Web Service"; } public class AuthHeader : SoapHeader { public string UserName; public string Password; } }
Code Wyjaśnienie:
- Tworzymy teraz osobną klasę o nazwie Nagłówek uwierzytelniania który jest typu Klasa SoapHeaderZa każdym razem, gdy chcesz zmienić dane przekazywane w nagłówku SOAP, musisz utworzyć klasę korzystającą z wbudowanej klasy SoapHeader platformy .Net. Dzięki dostosowaniu nagłówka SOAP możemy teraz przekazać „nazwę użytkownika” i „hasło” podczas wywołania usługi sieciowej.
- 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.asmxTen kod w rzeczywistości definiuje funkcję naszej usługi sieciowej. Ta funkcja zwraca ciąg „To jest Guru99 Usługa sieciowa” dla klienta. Tym razem jednak ciąg zostanie zwrócony tylko wtedy, gdy aplikacja kliencka przekaże dane uwierzytelniające do usługi sieciowej.
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); } else return "This is a Guru99 Web service"; }
Code Wyjaśnienie:
- Tworzymy tutaj obiekt klasy AuthHeader, który został utworzony we wcześniejszym kroku. Obiekt ten zostanie przekazany naszemu Guru99Usługa internetowa w którym można dokładnie sprawdzić nazwę użytkownika i hasło.
- 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.
- W tym bloku kodu sprawdzamy nazwę użytkownika i hasło przekazywane podczas wywołania usługi sieciowej. Jeśli nazwa użytkownika jest równa „Guru99” a hasło jest równe „Guru99Password”, a następnie komunikat „To jest GuruUsługa internetowa „99 Web service” jest przekazywana klientowi. W przeciwnym razie, jeśli podany zostanie nieprawidłowy identyfikator użytkownika i hasło, klient otrzyma komunikat o błędzie.
Jeśli kod zostanie wykonany pomyślnie, po uruchomieniu kodu w przeglądarce zostanie wyświetlony następujący komunikat.
Wyjście:
Powyższy wynik jest wyświetlany po uruchomieniu programu, co oznacza, że usługa sieciowa jest już dostępna. Kliknijmy „Usługa”. Descriptłącze jonowe.
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:
- Audyt i zarządzanie logami – Użyj rejestrowania aplikacji, aby rejestrować wszystkie żądania przychodzące do usług sieciowych. Zapewnia to szczegółowy raport o tym, kto wywołał usługę sieciową i może pomóc w analizie skutków w przypadku naruszenia bezpieczeństwa.
- Przepływ połączeń do usługi sieciowej – Spróbuj zaobserwować przepływ wywołań w usługach sieciowych. Domyślnie aplikacja może wywoływać wiele żądań usług sieciowych z tokenami uwierzytelniającymi przekazywanymi między nimi. Wszystkie wywołania między usługami sieciowymi muszą być monitorowane i rejestrowane.
- Wrażliwa informacja – Nie umieszczaj w logach poufnych informacji, takich jak hasła, numery kart kredytowych ani żadnych innych poufnych informacji. Jeśli wystąpi zdarzenie zawierające którąkolwiek z tych informacji, należy je usunąć przed zarejestrowaniem.
- Track Biznes Operanych - Track istotnych operacji biznesowych. Na przykład, wyposaż swoją aplikację w narzędzia do rejestrowania dostępu do szczególnie wrażliwych metod i logiki biznesowej. Weźmy na przykład sklep internetowy.ping Aplikacja. Typowa aplikacja składa się z wielu kroków, takich jak wybór produktów do kupienia, załadowanie produktów do koszyka, a następnie finalizacja zakupu. Cały ten proces biznesowy musi być tracobsługiwane przez usługę internetową.
- Prawidłowe uwierzytelnianie – Uwierzytelnianie to mechanizm, za pomocą którego klienci mogą ustalić swoją tożsamość w usłudze sieciowej za pomocą określonego zestawu danych uwierzytelniających, które mogą potwierdzić tę tożsamość. Nigdy nie należy przechowywać danych uwierzytelniających użytkownika, a zatem, jeśli do wywołania usługi sieciowej używany jest protokół WS Security, należy pamiętać, że usługa sieciowa nie powinna przechowywać danych uwierzytelniających wysyłanych w nagłówku SOAP. Powinny one zostać odrzucone przez usługę sieciową.














