Výukový program zabezpečení webové služby (WS) s příkladem SOAP

Obsah:

Anonim

Co je WS Security?

WS Security je standard, který řeší zabezpečení při výměně dat jako součásti webové služby. Jedná se o klíčovou funkci SOAP, díky níž je velmi oblíbený pro vytváření webových služeb.

Zabezpečení je důležitou funkcí jakékoli webové aplikace. Protože téměř všechny webové aplikace jsou vystaveny internetu, existuje vždy šance na bezpečnostní hrozbu pro webové aplikace. Při vývoji webových aplikací se proto vždy doporučuje zajistit, aby byla aplikace navržena a vyvinuta s ohledem na zabezpečení.

V tomto výukovém programu se naučíte

  • Bezpečnostní hrozby a protiopatření
  • Bezpečnostní standardy webových služeb
  • Jak vytvářet zabezpečené webové služby
  • Osvědčené postupy pro zabezpečení webových služeb

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 podívejme se, jak funguje z hlediska zabezpečení.

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á k zabezpečené komunikaci vrstvu Secure Sockets nebo SSL. Klient i server budou mít digitální certifikát, který jim umožní identifikovat se jako originální, když dojde ke komunikaci mezi klientem a serverem.

Ve standardní komunikaci HTTPS mezi klientem a serverem probíhají následující kroky

  1. Klient odešle požadavek na server prostřednictvím klientského certifikátu. Když server uvidí certifikát klienta, udělá si ve svém systému mezipaměti poznámku, aby věděl, že odpověď by se měla vrátit pouze tomuto klientovi.
  2. Server se poté klientovi ověří odesláním jeho certifikátu. Tím je zajištěno, že klient komunikuje se správným serverem.
  3. Veškerá další komunikace mezi klientem a serverem je šifrována. Tím je zajištěno, že pokud se ostatní uživatelé pokusí prolomit zabezpečení a získat požadovaná data, nebudou jej moci přečíst, protože by byla zašifrována.

Výše uvedený typ zabezpečení však nebude fungovat ve všech situacích. Může přijít doba, kdy klient může mluvit s více servery. Níže uvedený příklad ukazuje, že klient mluví současně s databází i webovým serverem. V takových případech nemusí všechny informace procházet protokolem https.

To je místo, kde SOAP přichází do akce k překonání těchto překážek zavedením specifikace zabezpečení WS. S touto specifikací jsou všechna data související se zabezpečením definována v prvku záhlaví SOAP.

Prvek záhlaví může obsahovat níže uvedené informace

  1. 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í.
  2. Pokud je některý prvek v těle SOAP šifrován, záhlaví by obsahovalo potřebné šifrovací klíče, aby bylo možné zprávu dešifrovat, když dosáhne cíle.

V prostředích s více servery výše uvedená technika ověřování SOAP pomáhá následujícím způsobem.

  • Vzhledem k tomu, že tělo SOAP je šifrováno, bude ho možné dešifrovat pouze webový server, který je hostitelem webové služby. Je to proto, jak je navržen protokol SOAP.
  • Předpokládejme, že pokud je zpráva předána databázovému serveru v požadavku HTTP, nelze ji dešifrovat, protože databáze k tomu nemá správné mechanismy.
  • Pouze když se požadavek skutečně dostane na webový server jako protokol SOAP, bude schopen dešifrovat zprávu a odeslat příslušnou odpověď zpět klientovi.

V následujících tématech uvidíme, jak lze pro SOAP použít standard WS Security.

Bezpečnostní standardy webových služeb

Jak je popsáno v předchozí části, standard WS-Security se točí kolem toho, že má v záhlaví SOAP definici zabezpečení.

Pověření v záhlaví SOAP se spravují dvěma způsoby.

Nejprve definuje speciální prvek s názvem UsernameToken. Používá se 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. Používá se v situacích, kdy se používají šifrovací techniky, jako je Kerberos nebo X.509.

Níže uvedený diagram ukazuje tok fungování bezpečnostního modelu ve WS Security

Níže jsou uvedeny kroky, které probíhají ve výše uvedeném pracovním postupu

  1. Z klienta webové služby lze zaslat požadavek na službu Token zabezpečení. Tato služba může být zprostředkující webová služba, která je speciálně vytvořena k poskytování uživatelských jmen / hesel nebo certifikátů skutečné webové službě SOAP.
  2. Token zabezpečení se poté předá klientovi webové služby.
  3. Klient webové služby poté zavolal webovou službu, ale tentokrát zajistil, aby byl token zabezpečení vložen do zprávy SOAP.
  4. Webová služba potom rozumí zprávě SOAP s ověřovacím tokenem a poté může kontaktovat službu Token zabezpečení a zjistit, zda je token zabezpečení autentický nebo ne.

Níže uvedený úryvek ukazuje formát ověřovací části, která je součástí dokumentu WSDL. Nyní 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.

Když je zpráva SOAP skutečně předána mezi klienty a serverem, část zprávy, která obsahuje pověření uživatele, může vypadat jako ta, která je uvedena výše. Název prvku wsse je speciální prvek s názvem definovaným pro SOAP a znamená, že obsahuje informace založené na zabezpečení.

Jak vytvářet zabezpečené webové služby

Nyní se podívejme na příklad zabezpečení webové služby SOAP. Zabezpečení webové služby sestavíme podle příkladu ukázaného dříve v kapitole SOAP a přidáme k němu vrstvu zabezpečení.

V našem příkladu vytvoříme jednoduchou webovou službu, která se použije k vrácení řetězce do aplikace, která volá webovou službu. Ale tentokrát, kolem, když je vyvolána webová služba, je třeba zadat pověření volající službě. Postupujeme podle níže uvedených kroků k vytvoření naší webové služby SOAP a přidáme k ní definici zabezpečení.

Krok 1) Prvním krokem je vytvoření prázdné webové aplikace Asp.Net. V aplikaci Visual Studio 2013 klikněte na možnost nabídky Soubor-> Nový projekt.

Jakmile kliknete na možnost Nový projekt, Visual Studio vám poté poskytne další dialogové okno pro výběr typu projektu a poskytnutí nezbytných podrobností o projektu. To je vysvětleno v dalším kroku

Krok 2) V tomto kroku

  1. Nejprve si vyberte webovou šablonu C # 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 Visual Studio poté provede nezbytné kroky k přidání požadovaných souborů, které jsou vyžadovány jakoukoli webovou aplikací.
  2. Pojmenujte svůj projekt, který byl v našem případě uveden jako „ webservice.asmx. “ Pak nezapomeňte uvést umístění, kde budou soubory projektu uloženy.

Po dokončení uvidíte soubor projektu vytvořený v Průzkumníku řešení v sadě Visual Studio 2013.

Krok 3) V tomto kroku

Do našeho projektu přidáme soubor webové služby

  1. Nejprve klepněte pravým tlačítkem myši na soubor projektu, jak je znázorněno níže
  1. Jakmile kliknete pravým tlačítkem na soubor projektu, máte možnost zvolit možnost „Přidat-> Webová služba (ASMX) a přidat soubor webové služby. Stačí zadat název výukové služby pro soubor názvu webové služby.

Výše uvedený krok vyvolá dialogové okno, ve kterém lze zadat název souboru webové služby. Takže v níže uvedeném dialogovém okně zadejte název TutorialService jako název souboru.

Krok 4) Přidejte následující kód do souboru asmx Tutorial Service. 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 generová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;}}

Vysvětlení kódu: -

  1. Nyní vytváříme samostatnou třídu s názvem AuthHeader, která je typu třídy SoapHeader . Kdykoli chcete změnit to, co se předává v záhlaví SOAP, musíte vytvořit třídu, která používá vestavěnou třídu SoapHeader .Net. Přizpůsobením SOAPheader nyní máme možnost předat 'uživatelské jméno' a 'heslo' při volání webové služby.
  2. Poté definujeme proměnné 'UserName' a 'Password', které jsou typu string. Budou použity k uchovávání hodnot uživatelského jména a hesla, které jsou předávány webové službě.

Krok 5) V dalším kroku je třeba do stejného souboru TutorialService.asmx přidat následující kód . Tento kód ve skutečnosti definuje funkci naší webové služby. Tato funkce vrací klientovi řetězec „This is a Guru99 Web service“. Ale tentokrát bude řetězec vrácen, pouze pokud klientská aplikace předá pověření webové službě.

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

Vysvětlení kódu: -

  1. Zde vytváříme objekt třídy AuthHeader, který byl vytvořen v předchozím kroku. Tento objekt bude předán naší Guru99Webservice, ve které lze pečlivě prozkoumat uživatelské jméno a heslo.
  2. Atribut [SoapHeader] se nyní používá k určení, že při volání webové služby musí být předáno uživatelské jméno a heslo.
  3. V tomto bloku kódu ve skutečnosti zkoumáme uživatelské jméno a heslo předané při volání webové služby. Pokud se uživatelské jméno rovná „Guru99“ a heslo se rovná „Guru99Password“, předá se klientovi zpráva „This is a Guru99 Web service“. V opačném případě bude klientovi zaslána chyba, pokud bude předáno nesprávné ID uživatele a heslo.

Pokud je kód úspěšně proveden, 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í při spuštění programu, což znamená, že webová služba je nyní k dispozici. Pojďme kliknout na odkaz Popis služby.

Z popisu služby nyní uvidíte, že uživatelské jméno a heslo jsou prvky souboru WSDL. Tyto parametry je třeba odeslat při vyvolání webové služby.

Osvědčené postupy pro zabezpečení webových služeb

Níže jsou uvedena bezpečnostní hlediska, která by měla být uvedena při práci s webovými službami

  1. Auditování a správa protokolů - Pomocí protokolování aplikací můžete protokolovat všechny požadavky, které přicházejí do webových služeb. To poskytuje podrobnou zprávu o tom, kdo vyvolal webovou službu, a může pomoci při analýze dopadů, pokud dojde k narušení zabezpečení.

  2. Tok hovorů do webové služby - Zkuste zaznamenat tok hovorů 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ředanými mezi těmito webovými službami. Všechny hovory mezi webovými službami je třeba sledovat a protokolovat.

  3. Citlivé informace - Nezahrnujte do svých záznamů citlivé informace, jako jsou hesla nebo čísla kreditních karet nebo jakékoli jiné důvěrné informace. Pokud existuje událost, která obsahuje některou z těchto informací, je třeba ji před přihlášením zahodit.

  4. Sledovat obchodní operace - Sledujte významné obchodní operace. Například vybavte svou aplikaci záznamem přístupu k obzvláště citlivým metodám a obchodní logice. Vezměme si příklad aplikace pro online nakupování. V typické aplikaci existuje několik kroků, jako je výběr položek, které se mají zakoupit, položky načtené do košíku a poté konečný nákup. Celý tento obchodní pracovní postup musí být sledován webovou službou.

  5. Správné ověřování - ověřování je mechanismus, kterým mohou klienti pomocí webové služby určit svou identitu pomocí určité sady přihlašovacích údajů, které tuto identitu dokážou. Jeden by nikdy neměl ukládat pověření uživatele, a proto, pokud se WS Security používá k volání webové služby, je třeba poznamenat, že webová služba by neměla ukládat pověření, která jsou odeslána v hlavičce SOAP. Ty by měla webová služba zlikvidovat.

souhrn

  • SOAP poskytuje další vrstvu nazvanou WS Security pro zajištění dalšího zabezpečení při volání na webové služby.
  • Zabezpečení WS lze volat pomocí jednoduchého uživatelského jména nebo hesla nebo jej lze použít s binárními certifikáty pro ověření
  • Viděli jsme, že v .Net můžeme přizpůsobit webovou službu tak, aby v rámci prvku záhlaví SOAP bylo předáno uživatelské jméno a heslo.