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.
A kliens és a szerver közötti szabványos HTTPS-kommunikáció során a következő lépések történnek
- 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.
- 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.
- 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.
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
- 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ó.
- 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
Az alábbiakban bemutatjuk a fenti munkafolyamat lépéseit
- 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.
- A biztonsági tokent ezután átadja a webszolgáltatási ügyfélnek.
- 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.
- 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.
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
- 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.
- 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.
Ha elkészült, látni fogja a Visual Studio 2013 megoldáskezelőjében létrehozott projektfájlt.
Step 3) Ebben a lépésben a
Egy webszolgáltatási fájlt fogunk hozzáadni projektünkhöz
- Először kattintson a jobb gombbal a projektfájlra az alábbiak szerint
- 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.
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.
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.
return "This is a Guru99 Web Service"; } public class AuthHeader : SoapHeader { public string UserName; public string Password; } }
Kód magyarázata: -
- 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.
- 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.
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: -
- 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ó.
- 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.
- 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:
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.
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.