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

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. Toto je klíčová funkce SOAP, díky které je velmi populární pro vytváření webových služeb.

Zabezpečení je důležitou funkcí každé webové aplikace. Vzhledem k tomu, že téměř všechny webové aplikace jsou vystaveny internetu, existuje vždy možnost ohrožení zabezpečení webových aplikací. Proto se při vývoji webových aplikací vždy doporučuje zajistit, aby aplikace byla navržena a vyvíjena s ohledem na bezpečnost.

Bezpečnostní hrozby a protiopatření

Abychom porozuměli bezpečnostním hrozbám, 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 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á pro zabezpečenou komunikaci vrstvu Secure Sockets nebo SSL. Klient i server budou mít digitální certifikát, který se bude identifikovat jako pravý, když mezi klientem a serverem dojde k jakékoli komunikaci.

Bezpečnostní hrozby a protiopatření

Při standardní HTTPS komunikaci 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í 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.
  2. 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.
  3. Veškerá komunikace mezi klientem a serverem je poté šifrována. Tím je zajištěno, že pokud by se jakýkoli jiný uživatel pokusil prolomit zabezpečení a získat požadovaná data, nebyl by schopen je přečíst, protože by byl zašifrován.

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

Bezpečnostní hrozby a protiopatření

To je místo, kde SOAP přichází do akce, aby překonal takové překážky tím, že má zavedenou specifikaci zabezpečení WS. S touto specifikací jsou všechna data související se zabezpečením definována v prvku hlavičky SOAP.

Element 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 jakýkoli prvek v těle SOAP zašifrován, hlavička by obsahovala nezbytné šifrovací klíče, aby bylo možné zprávu dešifrovat, když dorazí na místo určení.

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 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.
  • Teprve když požadavek skutečně dorazí na webový server jako protokol SOAP, bude schopen dešifrovat zprávu a odeslat příslušnou odpověď zpět klientovi.

Jak lze standard WS Security použít, uvidíme v následujících tématech MÝDLO.

Bezpečnostní standardy webových služeb

Jak bylo uvedeno v předchozí části, standard WS-Security se točí kolem toho, že definice zabezpečení je zahrnuta v záhlaví SOAP.

Pověření v hlavičce SOAP se spravují dvěma způsoby.

Nejprve definuje speciální prvek nazvaný UsernameToken. Slouží 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. To se používá v situacích, ve kterých se používají šifrovací techniky, jako je Kerberos nebo X.509.

Níže uvedený diagram ukazuje tok toho, jak model zabezpečení funguje v WS Security

Bezpečnostní standardy webových služeb

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

  1. Požadavek lze odeslat z klienta webové služby do služby Security Token Service. Tato služba může být přechodnou 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.
  2. Token zabezpečení je poté předán klientovi webové služby.
  3. Klient webové služby poté zavolal webovou službu, ale tentokrát zajistil, aby byl bezpečnostní token začleněn do zprávy SOAP.
  4. 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 autentizační části, která je součástí dokumentu WSDL. Nyní na základě níže uvedeného úryvku bude zpráva SOAP obsahovat 2 další prvky, jedním je uživatelské jméno a druhým je 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ána mezi klienty a serverem, část zprávy, která obsahuje přihlašovací údaje uživatele, může vypadat jako ta, která je zobrazena výše. Název prvku wsse je speciální prvek pojmenovaný pro SOAP a znamená, že obsahuje informace založené na zabezpečení.

Jak budovat zabezpečené webové služby

Nyní se podívejme na příklad zabezpečení webové služby SOAP. Zabezpečení webových služeb postavíme na příkladu uvedeném výše v kapitole 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 do aplikace, která webovou službu volá. Ale tentokrát, když je vyvolána webová služba, je třeba zadat přihlašovací údaje volající službě. Pojďme podle níže uvedených kroků vytvořit naši webovou službu SOAP a přidat do ní definici 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.

Vytvářejte zabezpečené webové služby

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,

  1. 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 Visual Studio poté provede nezbytné kroky k přidání požadovaných souborů, které vyžaduje jakákoli webová aplikace.
  2. 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.

Vytvářejte zabezpečené webové služby

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

Vytvářejte zabezpečené webové služby

Krok 3) V tomto kroku,

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

  1. První Klikněte pravým tlačítkem myši na soubor projektu, jak je znázorněno níže

Vytvářejte zabezpečené webové služby

  1. Jakmile kliknete pravým tlačítkem na soubor projektu, máte možnost vybrat možnost „Přidat->Webová služba (ASMX) pro přidání souboru webové služby. Stačí zadat název Tutorial Service pro soubor názvu webové služby.

    Vytvářejte zabezpečené webové služby

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

Vytvářejte zabezpečené webové služby

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.

Vytvářejte zabezpečené webové služby

		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řída SoapHeader. Kdykoli chcete změnit to, co se předává v hlavičce SOAP, je třeba vytvořit třídu, která používá vestavěnou třídu SoapHeader .Net. Přizpůsobením SOAPheader máme nyní 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 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.asmx. Tento kód ve skutečnosti definuje funkci naší webové služby. Tato funkce vrací klientovi řetězec „Toto je webová služba Guru99“. Tentokrát však bude řetězec vrácen pouze v případě, že klientská aplikace předá přihlašovací údaje webové službě.

Vytvářejte zabezpečené webové služby

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

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šemu Webová služba Guru99 ve kterém lze podrobně prozkoumat uživatelské jméno a heslo.
  2. 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.
  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 je rovno „Guru99Password“, je klientovi předána zpráva „Toto je webová služba Guru99“. V opačném případě bude klientovi zaslá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:

Vytvářejte zabezpečené webové služby

Výše uvedený výstup se zobrazí při spuštění programu, což znamená, že webová služba je nyní dostupná. Klikneme na Službu Descriptiontový odkaz.

Vytvářejte zabezpečené webové služby

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

Níže jsou uvedeny bezpečnostní aspekty, které je třeba vzít v úvahu při práci s webovými službami

1. Auditování a správa protokolů – Použijte protokolování aplikace k protokolování všech požadavků, které přicházejí do webových služeb. To poskytuje podrobnou zprávu o tom, kdo spustil webovou službu, a může pomoci při analýze dopadu, pokud dojde k narušení bezpečnosti.

2. Tok volání na webovou službu – Zkuste si všímat toku hovorů ve webových službách. Ve výchozím nastavení může aplikace volat více požadavků webových služeb s autentizačními tokeny předávanými mezi těmito webovými službami. Všechny hovory mezi webovými službami je třeba monitorovat a zaznamenávat.

3. Citlivé informace – Nezahrnujte do položek protokolu citlivé informace, jako jsou hesla nebo čísla kreditních karet nebo jakékoli jiné důvěrné informace. Pokud existuje událost, která má některou z těchto informací, je třeba ji před protokolováním zahodit.

4. Sledujte podnikání Operace – Sledujte významné obchodní operace. Například instrumentujte svou aplikaci tak, aby zaznamenávala přístup ke zvláště citlivým metodám a obchodní logice. Vezměme si příklad online nákupní aplikace. V typické aplikaci existuje několik kroků, jako je výběr položek k nákupu, položky vložené 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á autentizace – Autentizace je mechanismus, pomocí kterého mohou klienti zjistit svou identitu s webovou službou pomocí určité sady přihlašovacích údajů, které mohou tuto identitu prokázat. Nikdy byste neměli ukládat přihlašovací údaje uživatele, a proto, pokud se k volání webové služby používá WS Security, je třeba poznamenat, že webová služba by neměla ukládat přihlašovací údaje, které se odesílají v hlavičce SOAP. Ty by měla webová služba zlikvidovat.

Shrnutí

  • SOAP poskytuje další vrstvu nazvanou WS Security pro poskytování dodatečného zabezpečení při volání webových služeb.
  • 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 autentizaci
  • Viděli jsme to v . Čistá můžeme přizpůsobit webovou službu tak, aby uživatelské jméno a heslo bylo předáno jako součást prvku hlavičky SOAP.