Zabezpečení webových služeb (WS) s příkladem SOAP
⚡ Chytré shrnutí
Zabezpečení webových služeb (WS) je standard, který chrání data vyměňovaná během volání webové služby SOAP. Tento zdroj vysvětluje bezpečnostní hrozby a protiopatření, standardy WS-Security, vytváření zabezpečených webových služeb s přihlašovacími údaji a osvědčené postupy zabezpečení webových služeb.
Co je zabezpečení WS?
WS Security je standard, který řeší zabezpečení při výměně dat v rámci webové služby. Jedná se o klíčovou funkci protokolu SOAP, díky které je velmi populární pro vytváření webových služeb.
Zabezpečení je důležitou součástí každé webové aplikace. Vzhledem k tomu, že téměř všechny webové aplikace jsou vystaveny internetu, vždy existuje riziko bezpečnostní hrozby pro webové aplikace. Proto při vývojiping U webových aplikací se vždy doporučuje zajistit, aby byla aplikace navržena a vyvíjena s ohledem na bezpečnost.
Bezpečnostní hrozby a protiopatření
Abychom pochopili bezpečnostní hrozby, které mohou být pro webovou aplikaci nepřátelské, podívejme se na jednoduchý scénář webové aplikace a uvidíme, jak funguje z hlediska bezpečnosti.
Jedním z bezpečnostních opatření dostupných pro HTTP je protokol HTTPS. HTTPS je bezpečný způsob komunikace mezi klientem a serverem přes web. HTTPS využívá pro zabezpečenou komunikaci protokol Secure Sockets Layer neboli SSL. Klient i server budou mít digitální certifikát, který je identifikuje jako originální při jakékoli komunikaci mezi klientem a serverem.
Ve standardní komunikaci HTTPS mezi klientem a serverem probíhají následující kroky:
- Klient odešle požadavek na server prostřednictvím klientského certifikátu. Když server uvidí klientský certifikát, udělá si poznámku ve svém systému mezipaměti, aby věděl, že odpověď by se měla vrátit pouze tomuto klientovi.
- Server se pak ověří klientovi zasláním jeho certifikátu. Tím je zajištěno, že klient komunikuje se správným serverem.
- Veškerá následná komunikace mezi klientem a serverem je šifrována. To zajišťuje, že pokud by se jiní uživatelé pokusili prolomit zabezpečení a získat požadovaná data, nebudou si je moci přečíst, protože by byla šifrována.
Výše uvedený typ zabezpečení však nebude fungovat ve všech situacích. Může nastat situace, kdy klient může komunikovat s více servery. Níže uvedený příklad ukazuje klienta, který komunikuje současně s databází i s webovým serverem. V takových případech ne všechny informace mohou procházet protokolem HTTPS.
Zde přichází na řadu protokol SOAP, který tyto překážky překonává zavedením specifikace WS Security. Díky této specifikaci jsou všechna data související s bezpečností definována v záhlaví protokolu SOAP. Záhlaví může obsahovat následující informace:
- Pokud byla zpráva v těle SOAP podepsána jakýmkoli bezpečnostním klíčem, lze tento klíč definovat v prvku záhlaví.
- Pokud je jakýkoli prvek v těle SOAP protokolu zašifrovaný, záhlaví bude obsahovat potřebné šifrovací klíče, aby bylo možné zprávu po dosažení cíle dešifrovat.
V prostředí s více servery pomáhá výše uvedená technika ověřování SOAP následujícím způsobem:
- Vzhledem k tomu, že tělo SOAP je zašifrováno, bude jej moci dešifrovat pouze webový server, který je hostitelem webové služby. To je způsobeno tím, jak je navržen protokol SOAP.
- Předpokládejme, že zpráva je předána databázovému serveru v HTTP požadavku; nelze ji dešifrovat, protože databáze k tomu nemá správné mechanismy.
- Teprve když požadavek skutečně dorazí na webový server jako protokol SOAP, bude server schopen zprávu dešifrovat a odeslat odpovídající odpověď zpět klientovi.
V následujících tématech uvidíme, jak lze standard WS Security použít pro MÝDLO.
Bezpečnostní standardy webových služeb
Jak bylo uvedeno v předchozí části, standard WS-Security se zaměřuje na zahrnutí definice zabezpečení v záhlaví SOAP. Přihlašovací údaje v záhlaví SOAP jsou spravovány dvěma způsoby.
Nejprve definuje speciální element s názvem UsernameToken. Ten se používá k předání uživatelského jména a hesla webové službě. Druhým způsobem je použití binárního tokenu prostřednictvím BinarySecurityToken. Ten se používá v situacích, kdy se používají šifrovací techniky, jako je Kerberos nebo X.509.
Níže uvedený diagram znázorňuje postup fungování bezpečnostního modelu ve službě WS Security.
Níže jsou uvedeny kroky, které probíhají ve výše uvedeném pracovním postupu:
- Požadavek lze odeslat z klienta webové služby do služby Security Token Service. Tato služba může být zprostředkující webovou službou, která je speciálně vytvořena pro poskytování uživatelských jmen/hesel nebo certifikátů skutečné webové službě SOAP.
- Token zabezpečení je poté předán klientovi webové služby.
- Klient webové služby poté zavolá webovou službu, ale tentokrát zajistí, aby byl bezpečnostní token vložen do zprávy SOAP.
- Webová služba pak porozumí zprávě SOAP s ověřovacím tokenem a poté může kontaktovat službu tokenu zabezpečení, aby zjistila, zda je token zabezpečení autentický či nikoli.
Níže uvedený úryvek ukazuje formát ověřovací části, která je součástí dokumentu WSDL. Na základě níže uvedeného úryvku bude zpráva SOAP obsahovat 2 další prvky, jeden je uživatelské jméno a druhý heslo.
<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>
Když je zpráva SOAP skutečně předávána mezi klienty a serverem, část zprávy, která obsahuje uživatelské přihlašovací údaje, může vypadat podobně jako výše uvedená část. Název elementu wsse je speciální název elementu definovaný pro SOAP a znamená, že obsahuje informace o zabezpečení.
Jak budovat zabezpečené webové služby
Nyní se podívejme na příklad zabezpečení webové služby SOAP. Vytvoříme zabezpečení webové služby na základě příkladu demonstrovaného dříve v kapitole o SOAP a přidáme k němu bezpečnostní vrstvu.
V našem příkladu vytvoříme jednoduchou webovou službu, která bude sloužit k vrácení řetězce aplikaci, která webovou službu volá. Tentokrát však při volání webové služby musí být volající službě poskytnuty přihlašovací údaje. Postupujme podle níže uvedených kroků k vytvoření naší webové služby SOAP a přidání definice zabezpečení.
Krok 1) Prvním krokem je vytvoření prázdného asp.net Webová aplikace. Ve Visual Studiu 2013 klikněte na možnost nabídky Soubor->Nový projekt.
Jakmile kliknete na možnost Nový projekt, Visual Studio vám nabídne další dialogové okno pro výběr typu projektu a zadání nezbytných podrobností o projektu. To je vysvětleno v dalším kroku.
Krok 2) V tomto kroku,
- Ujistěte se, že jste nejprve vybrali C# webová šablona pro webovou aplikaci ASP.NET. Projekt musí být tohoto typu, aby bylo možné vytvořit projekt webových služeb. Výběrem této možnosti provede Visual Studio potřebné kroky k přidání požadovaných souborů, které potřebuje jakákoli webová aplikace.
- Pojmenujte svůj projekt, který byl v našem případě uveden jako „webservice.asmx„Pak nezapomeňte zadat umístění, kam budou soubory projektu uloženy.
Po dokončení uvidíte vytvořený soubor projektu v Průzkumníku řešení ve Visual Studiu 2013.
Krok 3) V tomto kroku přidáme do našeho projektu soubor webové služby.
- Nejprve klikněte pravým tlačítkem myši na soubor projektu, jak je znázorněno níže.
- Po kliknutí pravým tlačítkem myši na soubor projektu máte možnost vybrat možnost „Přidat->Webová služba (ASMX)“ a přidat soubor webové služby. Stačí zadat název Tutorial Service pro soubor s názvem webové služby.
Výše uvedený krok vyvolá dialogové okno, ve kterém můžete zadat název souboru webové služby. V níže uvedeném dialogovém okně tedy zadejte jako název souboru název TutorialService.
Krok 4) Přidejte následující kód do souboru asmx výukové služby. Níže uvedený fragment kódu se používá k přidání vlastní třídy, která se použije ke změně záhlaví SOAP při vygenerování zprávy SOAP. Protože nyní chceme do hlavičky SOAP přidat pověření zabezpečení, je tento krok vyžadován.
return "This is a Guru99 Web Service"; } public class AuthHeader : SoapHeader { public string UserName; public string Password; } }
Code Vysvětlení:
- Nyní vytváříme samostatnou třídu s názvem AuthHeader který je typu třída SoapHeaderKdykoli chcete změnit, co se předává v hlavičce SOAP, je třeba vytvořit třídu, která používá vestavěnou třídu SoapHeader z .Net. Úpravou hlavičky SOAP nyní máme možnost předat „Uživatelské jméno“ a „Heslo“ při volání webové služby.
- Poté definujeme proměnné 'UserName' a 'Password', které jsou typu string. Budou použity k uložení hodnot uživatelského jména a hesla, které jsou předány webové službě.
Krok 5) Jako další krok je k tomu třeba přidat následující kód Soubor TutorialService.asmxTento kód ve skutečnosti definuje funkci naší webové služby. Tato funkce vrací řetězec „Toto je Guru99 Webová služba“ klientovi. Tentokrát však bude řetězec vrácen pouze v případě, že klientská aplikace předá webové službě přihlašovací údaje.
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 Vysvětlení:
- Zde vytváříme objekt třídy AuthHeader, který byl vytvořen v předchozím kroku. Tento objekt bude předán našemu Guru99Webservice ve kterém lze podrobně prozkoumat uživatelské jméno a heslo.
- Atribut [SoapHeader] se nyní používá k určení, že když je volána webová služba, musí být předáno uživatelské jméno a heslo.
- V tomto bloku kódu ve skutečnosti zkoumáme uživatelské jméno a heslo předávané při volání webové služby. Pokud je uživatelské jméno rovno „Guru99“ a heslo se rovná „Guru„99Password“, poté se zobrazí zpráva „Toto je Guru„99 Webová služba“ je předávána klientovi. V opačném případě bude klientovi odeslána chyba, pokud bude předáno nesprávné uživatelské jméno a heslo.
Pokud je kód úspěšně spuštěn, při spuštění kódu v prohlížeči se zobrazí následující výstup.
Výstup:
Výše uvedený výstup se zobrazí po spuštění programu, což znamená, že webová služba je nyní k dispozici. Klikněme na Službu Descriptiontový odkaz.
Z popisu služby nyní uvidíte, že uživatelské jméno a heslo jsou prvky wsdl soubor. Tyto parametry je třeba odeslat při vyvolání webové služby.
Nejlepší postupy zabezpečení webových služeb
Při práci s webovými službami je třeba dbát na následující bezpečnostní aspekty:
- Auditování a správa protokolů – Používejte protokolování aplikací k zaznamenávání všech požadavků, které přicházejí k webovým službám. To poskytuje podrobnou zprávu o tom, kdo webovou službu spustil, a může pomoci s analýzou dopadu v případě narušení bezpečnosti.
- Tok volání webové služby – Zkuste si všimnout toku volání ve webových službách. Ve výchozím nastavení může aplikace volat více požadavků na webové služby s ověřovacími tokeny předávanými mezi těmito webovými službami. Všechna volání mezi webovými službami je třeba monitorovat a protokolovat.
- Citlivé informace – Do záznamů v protokolu nezadávejte citlivé informace, jako jsou hesla, čísla kreditních karet ani žádné jiné důvěrné informace. Pokud dojde k události, která obsahuje některou z těchto informací, je třeba ji před protokolováním smazat.
- Track Business Operace - Track významným obchodním operacím. Například nastavte svou aplikaci tak, aby zaznamenávala přístup k obzvláště citlivým metodám a obchodní logice. Vezměte si příklad internetového obchodu.ping aplikace. Typická aplikace zahrnuje několik kroků, jako je výběr položek k zakoupení, vložení položek do košíku a následný konečný nákup. Celý tento pracovní postup musí být traczkontrolováno webovou službou.
- Správné ověřování – Autentizace je mechanismus, kterým si klienti mohou ověřit svou identitu u webové služby pomocí určité sady přihlašovacích údajů, které tuto identitu prokazují. Nikdy by se neměly ukládat přihlašovací údaje uživatele, a proto je-li k volání webové služby použito zabezpečení WS, je třeba poznamenat, že webová služba by neměla ukládat přihlašovací údaje odeslané v záhlaví SOAP. Tyto údaje by měla webová služba zahodit.














