Web Service (WS) biztonsági oktatóanyag SOAP példával

Mi az a WS Security?

A WS Security egy szabvány, amely a webszolgáltatás részeként történő adatcsere során a biztonsággal foglalkozik. Ez a SOAP kulcsfontosságú funkciója, amely nagyon népszerűvé teszi a webszolgáltatások létrehozásában.

A biztonság minden webalkalmazásban fontos funkció. Mivel szinte minden webalkalmazás ki van téve az internetnek, mindig fennáll a veszélye a webalkalmazások biztonsági kockázatának. Ezért a web alapú alkalmazások fejlesztésekor mindig ajánlott gondoskodni arról, hogy az alkalmazás tervezése és fejlesztése a biztonság szem előtt tartásával történjen.

Biztonsági veszélyek és ellenintézkedések

A webalkalmazásokkal szemben ellenséges biztonsági fenyegetések megértéséhez nézzünk meg egy webalkalmazás egyszerű forgatókönyvét, és nézzük meg, hogyan működik biztonsági szempontból.

A HTTP számára elérhető biztonsági intézkedések egyike a HTTPS protokoll. A HTTPS a webes kommunikáció biztonságos módja az ügyfél és a szerver között. A HTTPS a Secure Sockets réteget vagy az SSL-t használja a biztonságos kommunikációhoz. Mind a kliens, mind a kiszolgáló rendelkezik egy digitális tanúsítvánnyal, amely eredetinek tudja magát azonosítani, amikor bármilyen kommunikáció történik az ügyfél és a szerver között.

Biztonsági veszélyek és ellenintézkedések

A kliens és a szerver közötti szabványos HTTPS-kommunikáció során a következő lépések történnek

  1. A kliens kérést küld a szervernek az ügyféltanúsítványon keresztül. Amikor a kiszolgáló meglátja az ügyféltanúsítványt, feljegyzést készít a gyorsítótár-rendszerébe, hogy tudja, hogy a válasznak csak ehhez az ügyfélhez kell visszatérnie.
  2. A szerver ezután hitelesíti magát a kliens számára a tanúsítvány elküldésével. Ez biztosítja, hogy az ügyfél a megfelelő szerverrel kommunikáljon.
  3. Ezt követően minden kommunikáció az ügyfél és a szerver között titkosított. Ez biztosítja, hogy ha bármely más felhasználó megpróbálja feltörni a biztonságot és megszerezni a szükséges adatokat, akkor nem tudja elolvasni, mert titkosítva lenne.

De a fenti típusú biztonság nem működik minden helyzetben. Eljöhet az idő, amikor a kliens több szerverrel is tud beszélni. Az alábbi példa azt mutatja, hogy egy ügyfél egyszerre beszél adatbázissal és webszerverrel. Ilyen esetekben nem minden információ tud áthaladni a https protokollon.

Biztonsági veszélyek és ellenintézkedések

Itt lép működésbe a SOAP az ilyen akadályok leküzdésére a WS Security specifikációval. Ezzel a specifikációval minden biztonsággal kapcsolatos adat a SOAP fejlécelemben van meghatározva.

A fejléc elem az alább említett információkat tartalmazhatja

  1. Ha a SOAP törzsén belüli üzenetet bármilyen biztonsági kulccsal aláírták, akkor az a kulcs a fejléc elemben definiálható.
  2. Ha a SOAP törzsön belül bármely elem titkosítva van, a fejléc tartalmazza a szükséges titkosítási kulcsokat, hogy az üzenet visszafejthető legyen, amikor eléri a célt.

Többkiszolgálós környezetben a SOAP hitelesítés fenti technikája a következő módon segít.

  • Mivel a SOAP törzse titkosított, csak a webszolgáltatást üzemeltető webszerver tudja visszafejteni. Ez a SOAP protokoll kialakításának köszönhető.
  • Tegyük fel, hogy ha az üzenetet HTTP-kérésben továbbítják az adatbázis-kiszolgálónak, akkor nem lehet visszafejteni, mert az adatbázis nem rendelkezik ehhez megfelelő mechanizmusokkal.
  • Csak akkor tudja megfejteni az üzenetet, és visszaküldi a megfelelő választ a kliensnek, ha a kérés ténylegesen eléri a webszervert SOAP protokollként.

A következő témakörökben meglátjuk, hogyan használható a WS Security szabvány SOAP.

Webszolgáltatás biztonsági szabványai

Amint azt a korábbi szakaszban tárgyaltuk, a WS-Security szabvány a SOAP fejlécben található biztonsági definíció körül forog.

A SOAP-fejlécben lévő hitelesítő adatok kezelése kétféleképpen történik.

Először is meghatároz egy speciális elemet, melynek neve UsernameToken. Ez a felhasználónév és jelszó átadására szolgál a webszolgáltatásnak.

A másik módszer egy bináris token használata a BinarySecurityTokenen keresztül. Ez olyan helyzetekben használatos, amikor titkosítási technikákat, például Kerberost vagy X.509-et használnak.

Az alábbi diagram a biztonsági modell működését mutatja be a WS Security rendszerben

Webszolgáltatás biztonsági szabványai

Az alábbiakban bemutatjuk a fenti munkafolyamat lépéseit

  1. Kérelmet küldhet a webszolgáltatási ügyfél a Security Token Service felé. Ez a szolgáltatás lehet egy köztes webszolgáltatás, amely kifejezetten felhasználónevek/jelszavak vagy tanúsítványok biztosítására szolgál a tényleges SOAP webszolgáltatás számára.
  2. A biztonsági tokent ezután átadja a webszolgáltatási ügyfélnek.
  3. A webszolgáltatás-ügyfél ezután felhívta a webszolgáltatást, de ezúttal gondoskodott arról, hogy a biztonsági token be legyen ágyazva a SOAP üzenetbe.
  4. A webszolgáltatás ezután megérti a SOAP-üzenetet a hitelesítési jogkivonattal, majd kapcsolatba léphet a biztonsági token szolgáltatással, hogy ellenőrizze, hogy a biztonsági token hiteles-e vagy sem.

Az alábbi részlet a WSDL dokumentum részét képező hitelesítési rész formátumát mutatja. Az alábbi részlet alapján a SOAP üzenet 2 további elemet fog tartalmazni, az egyik a felhasználónév, a másik a jelszó.

<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>

Amikor a SOAP-üzenet ténylegesen átadásra kerül az ügyfelek és a szerver között, az üzenetnek a felhasználói hitelesítő adatokat tartalmazó része a fentihez hasonlóan nézhet ki. A wsse elem neve a SOAP számára definiált speciális elem, és azt jelenti, hogy biztonsági alapú információkat tartalmaz.

Hogyan építsünk fel biztonságos webszolgáltatásokat

Most nézzük meg a SOAP webszolgáltatás biztonsági példáját. A webszolgáltatás biztonságát a SOAP fejezetben korábban bemutatott példa alapján építjük fel, és egy biztonsági réteget adunk hozzá.

Példánkban egy egyszerű webszolgáltatást fogunk létrehozni, amely egy karakterlánc visszaadására szolgál a webszolgáltatást meghívó alkalmazásnak. Ezúttal azonban a webszolgáltatás meghívásakor a hitelesítő adatokat meg kell adni a hívó szolgáltatásnak. Kövesse az alábbi lépéseket a SOAP webszolgáltatás létrehozásához és a biztonsági definíció hozzáadásához.

Step 1) Az első lépés egy üres létrehozása Asp.Net Webes alkalmazás. A Visual Studio 2013-ban kattintson a Fájl->Új projekt menüpontra.

Biztonságos webszolgáltatások létrehozása

Miután rákattint az Új projekt lehetőségre, a Visual Studio egy másik párbeszédablakot ad a projekt típusának kiválasztásához és a projekt szükséges részleteinek megadásához. Ezt a következő lépésben ismertetjük

Step 2) Ebben a lépésben a

  1. Győződjön meg arról, hogy először a C# websablon az ASP.NET webalkalmazáshoz. A projektnek ilyen típusúnak kell lennie a webszolgáltatási projekt létrehozásához. Ha ezt a lehetőséget választja, a Visual Studio elvégzi a szükséges lépéseket a szükséges fájlok hozzáadásához, amelyeket bármely webalapú alkalmazás igényel.
  2. Adjon nevet a projektjének, amelyet esetünkben a következőképpen adtunk:webservice.asmx.” Ezután mindenképpen adjon meg egy helyet, ahol a projektfájlokat tárolni fogja.

Biztonságos webszolgáltatások létrehozása

Ha elkészült, látni fogja a Visual Studio 2013 megoldáskezelőjében létrehozott projektfájlt.

Biztonságos webszolgáltatások létrehozása

Step 3) Ebben a lépésben a

Egy webszolgáltatási fájlt fogunk hozzáadni projektünkhöz

  1. Először kattintson a jobb gombbal a projektfájlra az alábbiak szerint

Biztonságos webszolgáltatások létrehozása

  1. Miután a jobb gombbal rákattint a projektfájlra, lehetősége van kiválasztani az „Add->Web Service (ASMX)” lehetőséget egy webszolgáltatási fájl hozzáadásához. Csak adja meg a Tutorial Service nevét a webszolgáltatás névfájljához.

    Biztonságos webszolgáltatások létrehozása

A fenti lépés során megjelenik egy párbeszédpanel, amelyben megadhatja a webszolgáltatási fájl nevét. Tehát az alábbi párbeszédpanelen adja meg a TutorialService nevét fájlnévként.

Biztonságos webszolgáltatások létrehozása

Step 4) Adja hozzá a következő kódot a Tutorial Service asmx fájljához. Az alábbi kódrészlet egy egyéni osztály hozzáadására szolgál, amely a SOAP fejléc megváltoztatására szolgál a SOAP üzenet generálásakor. Mivel most biztonsági hitelesítő adatokat szeretnénk hozzáadni a SOAP fejléchez, ez a lépés szükséges.

Biztonságos webszolgáltatások létrehozása

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

	}
}

Kód magyarázata: -

  1. Most egy külön osztályt hozunk létre, melynek neve AuthHeader amely típusú SoapHeader osztály. Amikor meg akarja változtatni, hogy mi kerüljön át a SOAP fejlécbe, létre kell hoznia egy osztályt, amely a .Net beépített SoapHeader osztályát használja. A SOAP-fejléc testreszabásával most már lehetőségünk van egy „Felhasználónév” és „Jelszó” átadására a webszolgáltatás meghívásakor.
  2. Ezután meghatározzuk a „Felhasználónév” és „Jelszó” változóit, amelyek karakterlánc típusúak. Ezek a felhasználónév és a jelszó értékeinek tárolására szolgálnak, amelyeket átadnak a webszolgáltatásnak.

Step 5) Következő lépésként a következő kódot kell hozzáadni ugyanahhoz TutorialService.asmx fájl. Ez a kód tulajdonképpen webszolgáltatásunk funkcióját határozza meg. Ez a függvény egy „Ez egy Guru99 webszolgáltatás” karakterláncot ad vissza az ügyfélnek. Ezúttal azonban a karakterlánc csak akkor kerül visszaadásra, ha az ügyfélalkalmazás átadja a hitelesítő adatokat a webszolgáltatásnak.

Biztonságos webszolgáltatások létrehozása

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

Kód magyarázata: -

  1. Itt az előző lépésben létrehozott AuthHeader osztály objektumát hozzuk létre. Ezt az objektumot átadjuk nekünk Guru99Webszolgáltatás amelyben a felhasználónév és a jelszó alaposan megvizsgálható.
  2. A [SoapHeader] attribútum most annak megadására szolgál, hogy a webszolgáltatás meghívásakor át kell adnia a felhasználónevet és a jelszót.
  3. Ebben a kódblokkban valójában a webszolgáltatás hívásakor átadott felhasználónevet és jelszót vizsgáljuk. Ha a felhasználónév „Guru99”, a jelszó pedig „Guru99Password”, akkor az „Ez egy Guru99 webszolgáltatás” üzenet kerül átadásra az ügyfélnek. Ellenkező esetben hibaüzenetet küld a kliens, ha rossz felhasználói azonosítót és jelszót ad meg.

Ha a kód sikeresen lefut, a következő kimenet jelenik meg, amikor futtatja a kódot a böngészőben.

output:

Biztonságos webszolgáltatások létrehozása

A fenti kimenet a program futtatásakor jelenik meg, ami azt jelenti, hogy a webszolgáltatás már elérhető. Kattintson a Szolgáltatásra Description link.

Biztonságos webszolgáltatások létrehozása

A szolgáltatás leírásából most láthatja, hogy a felhasználónév és a jelszó a wsdl fájlt. Ezeket a paramétereket a webszolgáltatás meghívásakor kell elküldeni.

Webszolgáltatás biztonságának bevált gyakorlatai

Az alábbiakban felsoroljuk azokat a biztonsági szempontokat, amelyeket figyelembe kell venni a webszolgáltatások használatakor

1. Auditálás és naplókezelés – Használja az alkalmazásnaplózást a webszolgáltatásokhoz érkező összes kérés naplózásához. Ez részletes jelentést ad arról, hogy ki hívta meg a webszolgáltatást, és segíthet a hatáselemzésben, ha bármilyen biztonsági megsértés történik.

2. A webszolgáltatás hívásainak áramlása – Próbáljon megjegyezni a hívások áramlását a webszolgáltatásokban. Alapértelmezés szerint egy alkalmazás több webszolgáltatás kérését is meghívhatja a webszolgáltatások között átadott hitelesítési tokenekkel. A webszolgáltatások közötti összes hívást figyelni és naplózni kell.

3. Érzékeny információk – Ne adjon meg érzékeny információkat a naplóbejegyzéseiben, például jelszavakat, hitelkártyaszámokat vagy bármilyen más bizalmas információt. Ha van egy esemény, amely tartalmazza ezeket az információkat, akkor azt el kell vetni a naplózás előtt.

4. Kövesse nyomon az üzletet OperaTIONS – Jelentős üzleti műveletek nyomon követése. Például eszközölje az alkalmazást a különösen érzékeny módszerekhez és üzleti logikához való hozzáférés rögzítésére. Vegyünk egy példát egy online vásárlási alkalmazásra. Egy tipikus alkalmazás több lépésből áll, mint például a megvásárolni kívánt termékek kiválasztása, a kosárba rakott termékek, majd a végső vásárlás. Ezt a teljes üzleti munkafolyamatot nyomon kell követnie a webszolgáltatásnak.

5. Megfelelő hitelesítés – A hitelesítés az a mechanizmus, amellyel a kliensek azonosíthatják azonosságukat a webszolgáltatással bizonyos hitelesítő adatok segítségével, amelyek igazolni tudják az azonosságot. Soha nem szabad tárolni a felhasználói hitelesítő adatokat, ezért ha a WS Security-t használják a webszolgáltatás hívására, meg kell jegyezni, hogy a webszolgáltatás nem tárolhatja a SOAP fejlécben elküldött hitelesítő adatokat. Ezeket a webszolgáltatásnak el kell dobnia.

Összegzésként

  • A SOAP egy további WS Security nevű réteget biztosít, amely további biztonságot nyújt a webszolgáltatások hívásakor.
  • A WS Security meghívható egyszerű felhasználónévvel vagy jelszóval, vagy bináris tanúsítványokkal is használható hitelesítéshez
  • Ebben láttuk . Net testreszabhatjuk a webszolgáltatást úgy, hogy a SOAP fejléc elem részeként átadjon egy felhasználónevet és jelszót.