Webszolgáltatás (WS) biztonság SOAP példával
⚡ Okos összefoglaló
A webszolgáltatás-biztonság (WS) egy olyan szabvány, amely védi a SOAP webszolgáltatás-hívások során kicserélt adatokat. Ez az anyag ismerteti a biztonsági fenyegetéseket és ellenintézkedéseket, a WS-biztonsági szabványokat, a biztonságos webszolgáltatás hitelesítő adatokkal történő felépítését, valamint a webszolgáltatás-biztonsággal kapcsolatos legjobb gyakorlatokat.
Mi az a WS Security?
A WS Security egy olyan szabvány, amely a webszolgáltatások részeként cserélt adatok biztonságát célozza. Ez a SOAP egyik kulcsfontosságú funkciója, amely nagyon népszerűvé teszi a webszolgáltatások létrehozásában.
A biztonság minden webes alkalmazás fontos jellemzője. Mivel szinte minden webes alkalmazás ki van téve az internetnek, mindig fennáll a biztonsági fenyegetés lehetősége a webes alkalmazásokat illetően. Ezért fejlesztéskorping webalapú alkalmazások esetében mindig ajánlott gondoskodni arról, hogy az alkalmazást a biztonság szem előtt tartásával tervezzék és fejlesszék.
Biztonsági veszélyek és ellenintézkedések
A webes alkalmazásokat fenyegető biztonsági fenyegetések megértéséhez nézzünk meg egy egyszerű webes alkalmazás-forgatókönyvet, és nézzük meg, hogyan működik biztonsági szempontból.
A HTTP egyik biztonsági intézkedése a HTTPS protokoll. A HTTPS a kliens és a szerver közötti biztonságos kommunikációs mód az interneten keresztül. A HTTPS a Secure Sockets Layer, vagyis az SSL titkosítást használja a biztonságos kommunikációhoz. Mind a kliens, mind a szerver rendelkezik egy digitális tanúsítvánnyal, amely igazolja valódiságát, amikor bármilyen kommunikáció történik a kliens és a szerver között.
Egy szabványos HTTPS kommunikáció során a kliens és a szerver között 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 az összes kommunikáció a kliens és a szerver között titkosítva van. 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 azokat, mivel azok titkosítva vannak.
De a fenti biztonsági fajta nem minden helyzetben fog működni. Eljöhet az idő, amikor a kliens több szerverrel is kommunikálhat. Az alábbi példa egy olyan klienst mutat be, amely egyszerre egy adatbázissal és egy webszerverrel is kommunikál. Ilyen esetekben nem minden információ haladhat át a HTTPS protokollon.
Itt jön képbe a SOAP, hogy leküzdje ezeket az akadályokat a WS Security specifikációjának bevezetésével. Ezzel a specifikációval minden biztonsággal kapcsolatos adat a SOAP header elemében van definiálva. A header elem az alábbi 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 bármely eleme titkosított, a fejléc tartalmazza a szükséges titkosítási kulcsokat, hogy az üzenet visszafejthető legyen, amikor eléri a célállomást.
Többszerveres környezetben a fenti SOAP hitelesítési technika a következőképpen 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 az üzenet HTTP kérésben kerül átadásra az adatbázis-kiszolgálónak; nem lehet visszafejteni, mert az adatbázis nem rendelkezik a megfelelő mechanizmusokkal ehhez.
- Csak akkor lesz képes megfejteni az üzenetet, és a megfelelő választ visszaküldeni a kliensnek, ha a kérés ténylegesen eléri a webkiszolgálót SOAP protokollként.
A következő témákban látni fogjuk, hogyan használható a WS Security szabvány a következőkre: 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 szereplő biztonsági definícióra épül. A SOAP fejlécben található hitelesítő adatokat kétféleképpen kezelik.
Először is, definiál egy speciális elemet, a UsernameToken-t. Ezzel jut el a felhasználónév és a jelszó a webszolgáltatáshoz. A másik módszer egy bináris token használata a BinarySecurityTokenen keresztül. Ezt olyan helyzetekben használják, amikor titkosítási technikákat, például Kerberost vagy X.509-et használnak.
Az alábbi ábra a biztonsági modell működését mutatja be a WS Security rendszerben.
Az alábbiakban a fenti munkafolyamatban végrehajtandó lépések láthatók:
- A webszolgáltatás kliense küldhet egy kérést a biztonsági token szolgáltatásnak. Ez a szolgáltatás lehet egy köztes webszolgáltatás, amelyet kifejezetten arra terveztek, hogy felhasználóneveket/jelszavakat vagy tanúsítványokat biztosítson 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 kliens ezután meghívja a webszolgáltatást, de ezúttal gondoskodik 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 kódrészlet a WSDL dokumentum hitelesítési részének formátumát mutatja. Az alábbi kódré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 átkerül a kliensek és a szerver között, az üzenet felhasználói hitelesítő adatokat tartalmazó része a fent láthatóhoz hasonlóan nézhet ki. A wsse elemnév egy speciális, a SOAP számára definiált elemnév, és azt jelenti, hogy biztonságalapú információkat tartalmaz.
Hogyan építsünk fel biztonságos webszolgáltatásokat
Most nézzünk egy SOAP webszolgáltatás biztonsági példát. A SOAP fejezetben korábban bemutatott példára építünk egy webszolgáltatás biztonságot, és hozzáadunk egy biztonsági réteget.
Példánkban egy egyszerű webszolgáltatást fogunk létrehozni, amely egy karakterláncot ad vissza a webszolgáltatást hívó alkalmazásnak. De ezúttal, amikor a webszolgáltatást meghívjuk, meg kell adni a hitelesítő adatokat a hívó szolgáltatásnak. Kövessük 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# webes sablon ASP.NET webes alkalmazáshoz. A projektnek ilyen típusúnak kell lennie ahhoz, hogy webszolgáltatás-projektet hozhasson létre. Ennek a lehetőségnek a kiválasztásával a Visual Studio elvégzi a szükséges lépéseket a webes alkalmazásokhoz szükséges fájlok hozzáadásához.
- Adjon nevet a projektjének, amelyet esetünkben a következőképpen adtunk:webszolgáltatás.asmx.” Ezután ügyeljen arra, hogy megadja a projektfájlok tárolására szolgáló helyet.
Ha kész, a létrehozott projektfájl a Visual Studio 2013 megoldáskezelőjében jelenik meg.
Step 3) Ebben a lépésben egy webszolgáltatás-fájlt fogunk hozzáadni a projektünkhöz.
- Először kattintson jobb gombbal a projektfájlra az alábbiak szerint.
- Miután jobb gombbal kattintott a projektfájlra, kiválaszthatja a „Hozzáadás->Webszolgáltatás (ASMX)” lehetőséget egy webszolgáltatásfájl hozzáadásához. Ehhez adjon meg egy „Oktatóanyag szolgáltatás” nevet a webszolgáltatásfájl névének.
A fenti lépés egy párbeszédpanelt jelenít meg, ahol megadhatja a webszolgáltatásfájl nevét. Az alábbi párbeszédpanelen írja be a TutorialService nevet 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; } }
Code Magyarázat:
- Most egy külön osztályt hozunk létre, melynek neve AuthHeader amely típusú SoapHeader osztályAmikor módosítani szeretnéd a SOAP fejlécben átadott adatokat, létre kell hozni egy olyan osztályt, amely a .Net beépített SoapHeader osztályát használja. A SOAP fejléc testreszabásával mostantól lehetőségünk van „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ájlEz a kód valójában a webszolgáltatásunk függvényét definiálja. Ez a függvény egy karakterláncot ad vissza: „Ez egy Guru99 Web service” üzenetet küld a kliensnek. Ezúttal azonban a karakterlánc csak akkor kerül visszaadásra, ha a kliensalkalmazá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); } else return "This is a Guru99 Web service"; }
Code Magyarázat:
- 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 meghívásakor átadott felhasználónevet és jelszót vizsgáljuk. Ha a felhasználónév egyenlő „Guru99”, és a jelszó egyenlő a következővel: „Guru„99Jelszó”, majd a „Ez egy Guru99 Web service” üzenetet adják át a kliensnek. Ellenkező esetben hibaüzenetet kap a kliens, ha helytelen felhasználói azonosítót és jelszót adnak 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 jelenik meg a program futtatásakor, ami azt jelenti, hogy a webszolgáltatás most 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
A webszolgáltatásokkal való munka során figyelembe kell venni a következő biztonsági szempontokat:
- Auditálás és naplókezelés – Alkalmazásnaplózás segítségével naplózhatja a webszolgáltatásokhoz érkező összes kérést. Ez részletes jelentést nyújt arról, hogy ki hívta meg a webszolgáltatást, és segíthet a hatáselemzésben, ha bármilyen biztonsági rés történik.
- A webszolgáltatáshoz irányuló hívások folyamata – Próbáld megfigyelni a webszolgáltatások hívásának folyamatát. Alapértelmezés szerint egy alkalmazás több webszolgáltatás-kérést is meghívhat, amelyek között hitelesítési tokenek kerülnek átadásra. A webszolgáltatások közötti összes hívást monitorozni és naplózni kell.
- Érzékeny információ – Ne adjon meg bizalmas információkat a naplóbejegyzéseiben, például jelszavakat, hitelkártyaszámokat vagy más bizalmas információkat. Ha van egy esemény, amely ilyen információkat tartalmaz, azt a naplózás előtt el kell távolítani.
- Track Üzlet OperaTIONS - Tracjelentős üzleti műveletek. Például, az alkalmazásod eszközeivel rögzítheted a különösen érzékeny módszerekhez és üzleti logikához való hozzáférést. Vegyünk például egy online áruházat.ping alkalmazás. Egy tipikus alkalmazás több lépésből áll, például a megvásárolni kívánt tételek kiválasztása, a kosárba helyezett tételek, majd a végső vásárlás. Ezt a teljes üzleti munkafolyamatot traca webszolgáltatás által kezelve.
- Megfelelő hitelesítés – A hitelesítés az a mechanizmus, amelynek segítségével a kliensek azonosíthatják magukat a webszolgáltatással egy bizonyos hitelesítő adatkészlet segítségével, amelyek bizonyítják ezt a személyazonossá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 meghívására, meg kell jegyezni, hogy a webszolgáltatásnak nem szabad tárolnia a SOAP fejlécben küldött hitelesítő adatokat. Ezeket a webszolgáltatásnak el kell dobnia.














