Primjer sigurnosti web servisa (WS) s SOAP protokolom
⚡ Pametni sažetak
Sigurnost web servisa (WS) je standard koji štiti podatke razmijenjene tijekom poziva SOAP web servisa. Ovaj resurs objašnjava sigurnosne prijetnje i protumjere, standarde WS-Security, izgradnju sigurne web servisa s vjerodajnicama i najbolje prakse sigurnosti web servisa.
Što je WS Security?
WS Security je standard koji se bavi sigurnošću prilikom razmjene podataka kao dijela web servisa. Ovo je ključna značajka SOAP-a koja ga čini vrlo popularnim za stvaranje web servisa.
Sigurnost je važna značajka svake web aplikacije. Budući da su gotovo sve web aplikacije izložene internetu, uvijek postoji mogućnost sigurnosne prijetnje web aplikacijama. Stoga, prilikom razvojaping web-baziranih aplikacija, uvijek se preporučuje osigurati da je aplikacija dizajnirana i razvijena imajući na umu sigurnost.
Sigurnosne prijetnje i protumjere
Kako bismo razumjeli sigurnosne prijetnje koje mogu biti neprijateljske prema web aplikaciji, pogledajmo jednostavan scenarij web aplikacije i vidimo kako ona funkcionira u smislu sigurnosti.
Jedna od sigurnosnih mjera dostupnih za HTTP je HTTPS protokol. HTTPS je siguran način komunikacije između klijenta i poslužitelja putem weba. HTTPS koristi Secure Sockets Layer ili SSL za sigurnu komunikaciju. I klijent i poslužitelj imat će digitalni certifikat kojim se identificiraju kao autentični kada se dogodi bilo kakva komunikacija između klijenta i poslužitelja.
U standardnoj HTTPS komunikaciji između klijenta i poslužitelja odvijaju se sljedeći koraci:
- Klijent šalje zahtjev poslužitelju putem certifikata klijenta. Kada poslužitelj vidi certifikat klijenta, zapisuje bilješku u svom sustavu predmemorije tako da zna da se odgovor treba vratiti samo ovom klijentu.
- Poslužitelj se zatim autentificira klijentu slanjem svojeg certifikata. Ovo osigurava da klijent komunicira s pravim poslužiteljem.
- Sva komunikacija između klijenta i poslužitelja nakon toga je šifrirana. To osigurava da ako bilo koji drugi korisnik pokuša probiti sigurnost i dobiti potrebne podatke, neće ih moći pročitati jer će biti šifrirani.
Ali gore navedena vrsta sigurnosti neće funkcionirati u svim situacijama. Može doći vrijeme kada klijent može komunicirati s više poslužitelja. Primjer u nastavku pokazuje klijenta koji istovremeno komunicira i s bazom podataka i s web poslužiteljem. U takvim slučajevima, ne mogu sve informacije proći putem HTTPS protokola.
Ovdje SOAP stupa na scenu kako bi prevladao takve prepreke korištenjem WS Security specifikacije. S ovom specifikacijom, svi podaci vezani uz sigurnost definirani su u SOAP elementu zaglavlja. Element zaglavlja može sadržavati sljedeće informacije:
- Ako je poruka unutar tijela SOAP-a potpisana bilo kojim sigurnosnim ključem, taj se ključ može definirati u elementu zaglavlja.
- Ako je bilo koji element unutar SOAP tijela šifriran, zaglavlje bi sadržavalo potrebne ključeve za šifriranje kako bi se poruka mogla dešifrirati kada stigne do odredišta.
U okruženju s više poslužitelja, gore navedena tehnika SOAP autentifikacije pomaže na sljedeći način:
- Budući da je tijelo SOAP-a šifrirano, moći će ga dešifrirati samo web poslužitelj koji hostira web uslugu. To je zbog načina na koji je SOAP protokol dizajniran.
- Pretpostavimo da se poruka prosljeđuje poslužitelju baze podataka u HTTP zahtjevu; ne može se dešifrirati jer baza podataka nema odgovarajuće mehanizme za to.
- Tek kada zahtjev stvarno stigne do web poslužitelja kao SOAP protokol, on će moći dešifrirati poruku i poslati odgovarajući odgovor natrag klijentu.
U sljedećim temama vidjet ćemo kako se WS Security standard može koristiti za SOAP.
Sigurnosni standardi web usluga
Kao što je spomenuto u prethodnom odjeljku, WS-Security standard se vrti oko uključivanja sigurnosne definicije u SOAP zaglavlje. Vjerodajnice u SOAP zaglavlju se upravljaju na 2 načina.
Prvo, definira poseban element pod nazivom UsernameToken. Koristi se za prosljeđivanje korisničkog imena i lozinke web servisu. Drugi način je korištenje binarnog tokena putem BinarySecurityTokena. Koristi se u situacijama u kojima se koriste tehnike šifriranja poput Kerberosa ili X.509.
Donji dijagram prikazuje tijek rada sigurnosnog modela u WS Securityju.
U nastavku su navedeni koraci koji se odvijaju u gore navedenom tijeku rada:
- Zahtjev se može poslati s web servisa na Security Token Service. Ovaj servis može biti posrednički web servis koji je posebno izgrađen za pružanje korisničkih imena/lozinki ili certifikata stvarnom SOAP web servisu.
- Sigurnosni token zatim se prosljeđuje klijentu web usluge.
- Klijent web servisa zatim poziva web servis, ali ovaj put osiguravajući da je sigurnosni token ugrađen u SOAP poruku.
- Web usluga tada razumije SOAP poruku s tokenom za provjeru autentičnosti i zatim može kontaktirati uslugu Sigurnosni token da vidi je li sigurnosni token autentičan ili ne.
Donji isječak prikazuje format dijela za autentifikaciju koji je dio WSDL dokumenta. Na temelju donjeg isječka, SOAP poruka će sadržavati 2 dodatna elementa, jedan je korisničko ime, a drugi lozinka.
<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>
Kada se SOAP poruka zapravo prenosi između klijenata i poslužitelja, dio poruke koji sadrži korisničke vjerodajnice mogao bi izgledati kao što je prikazano gore. Naziv elementa wsse je poseban naziv elementa definiran za SOAP i znači da sadrži sigurnosne informacije.
Kako izgraditi sigurne web usluge
Sada pogledajmo primjer sigurnosti SOAP web servisa. Izgradit ćemo sigurnost web servisa na primjeru prikazanom ranije u SOAP poglavlju i dodati mu sigurnosni sloj.
U našem primjeru, izradit ćemo jednostavnu web uslugu koja će se koristiti za vraćanje niza znakova aplikaciji koja poziva web uslugu. Ali ovaj put, kada se web usluga pozove, pozivajućoj usluzi potrebno je dostaviti vjerodajnice. Slijedimo dolje navedene korake za izradu naše SOAP web usluge i dodavanje sigurnosne definicije.
Korak 1) Prvi korak je stvaranje praznog Asp.Net Web aplikacija. U Visual Studio 2013 kliknite na opciju izbornika Datoteka->Novi projekt.
Nakon što kliknete opciju Novi projekt, Visual Studio će vam dati još jedan dijaloški okvir za odabir vrste projekta i davanje potrebnih pojedinosti o projektu. Ovo je objašnjeno u sljedećem koraku.
Korak 2) U ovom koraku
- Uvjerite se da prvo odaberete C# web predložak za ASP.NET web aplikaciju. Projekt mora biti ovog tipa kako bi se stvorio projekt web usluga. Odabirom ove opcije, Visual Studio će zatim izvršiti potrebne korake za dodavanje potrebnih datoteka koje su potrebne bilo kojoj web-aplikaciji.
- Dajte naziv svom projektu koji je u našem slučaju dat kao "webservice.asmx.” Zatim obavezno navedite lokaciju gdje će se pohraniti datoteke projekta.
Nakon što završite, vidjet ćete stvorenu datoteku projekta u vašem istraživaču rješenja u Visual Studiju 2013.
Korak 3) U ovom koraku ćemo našem projektu dodati datoteku web servisa.
- Prvo, desnom tipkom miša kliknite datoteku projekta kao što je prikazano dolje.
- Nakon što desnom tipkom miša kliknete na datoteku projekta, imate mogućnost odabrati opciju "Dodaj->Web servis (ASMX)" za dodavanje datoteke web servisa. Samo unesite naziv Tutorial Service za datoteku naziva web servisa.
Gornji korak će pokrenuti dijaloški okvir u koji se može unijeti naziv datoteke web servisa. Stoga u donjem dijaloškom okviru unesite naziv TutorialService kao naziv datoteke.
Korak 4) Dodajte sljedeći kod svojoj asmx datoteci Tutorial Service. Donji isječak koda koristi se za dodavanje prilagođene klase koja će se koristiti za promjenu SOAP zaglavlja kada se generira SOAP poruka. Budući da sada želimo dodati sigurnosne vjerodajnice u SOAP zaglavlje, ovaj je korak obavezan.
return "This is a Guru99 Web Service"; } public class AuthHeader : SoapHeader { public string UserName; public string Password; } }
Code Objašnjenje:
- Sada stvaramo zasebnu klasu pod nazivom AuthHeader koji je tipa Klasa SoapHeaderKad god želite promijeniti što se prenosi u SOAP zaglavlju, potrebno je stvoriti klasu koja koristi ugrađenu klasu SoapHeader iz .Neta. Prilagođavanjem SOAP zaglavlja sada imamo mogućnost prosljeđivanja 'Korisničkog imena' i 'Lozinke' kada se pozove web usluga.
- Zatim definiramo varijable 'UserName' i 'Password' koje su tipa string. Oni će se koristiti za čuvanje vrijednosti korisničkog imena i lozinke koje se prosljeđuju web servisu.
Korak 5) Kao sljedeći korak, potrebno je istom dodati sljedeći kod Datoteka TutorialService.asmxOvaj kod zapravo definira funkciju naše web usluge. Ova funkcija vraća niz znakova „Ovo je Guru99 Web servis” klijentu. Ali ovaj put, niz će se vratiti samo ako klijentska aplikacija proslijedi vjerodajnice web servisu.
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 Objašnjenje:
- Ovdje stvaramo objekt klase AuthHeader koji je stvoren u prethodnom koraku. Ovaj objekt će biti proslijeđen našem Guru99Webservice u kojem se korisničko ime i lozinka mogu pomno ispitati.
- Atribut [SoapHeader] sada se koristi kako bi se specificiralo da kada se pozove web usluga, treba proslijediti korisničko ime i lozinku.
- U ovom bloku koda zapravo ispitujemo korisničko ime i lozinku koji se prosljeđuju prilikom pozivanja web servisa. Ako je korisničko ime jednako "Guru99” i lozinka je jednaka “Guru99Password”, zatim poruka “Ovo je GuruKlijentu se prosljeđuje "99 Web service". Inače će se klijentu poslati greška ako se prosljeđuju pogrešan korisnički ID i lozinka.
Ako se kôd uspješno izvrši, sljedeći će se izlaz prikazati kada pokrenete kôd u pregledniku.
Izlaz:
Gornji izlaz se prikazuje kada se program pokrene, što znači da je web servis sada dostupan. Kliknite na Servis Descriptionska veza.
Iz opisa usluge sada ćete moći vidjeti da su korisničko ime i lozinka elementi usluge wsdl datoteka. Ovi parametri moraju se poslati kada se pozove web usluga.
Najbolji primjeri iz prakse za sigurnost web usluga
Slijede sigurnosne mjere koje treba uzeti u obzir pri radu s web servisima:
- Revizija i upravljanje zapisnicima – Koristite zapisivanje podataka aplikacije za zapisivanje svih zahtjeva koji dolaze web servisima. To daje detaljno izvješće o tome tko je pozvao web servis i može pomoći u analizi utjecaja ako dođe do bilo kakvog sigurnosnog propusta.
- Tijek poziva prema web servisu – Pokušajte zabilježiti tijek poziva u web servisima. Prema zadanim postavkama, aplikacija može pozivati više zahtjeva za web servise s tokenima za autentifikaciju koji se prosljeđuju između tih web servisa. Sve pozive između web servisa potrebno je pratiti i zapisivati.
- Osjetljive informacije – Ne uključujte osjetljive podatke u svoje zapise kao što su lozinke, brojevi kreditnih kartica ili bilo koje druge povjerljive informacije. Ako postoji događaj koji sadrži bilo koju od ovih informacija, potrebno ju je odbaciti prije zapisivanja.
- Track Poslovanje Operama - Track značajne poslovne operacije. Na primjer, instrumentirajte svoju aplikaciju za bilježenje pristupa posebno osjetljivim metodama i poslovnoj logici. Uzmimo za primjer online trgovinuping aplikacija. U tipičnoj aplikaciji postoji više koraka, kao što su odabir artikala za kupnju, učitavanje artikala u košaricu i zatim konačna kupnja. Cijeli ovaj poslovni tijek rada mora biti trackoje je odredila web usluga.
- Ispravna autentifikacija – Autentifikacija je mehanizam kojim klijenti mogu utvrditi svoj identitet s web servisom koristeći određeni skup vjerodajnica koje mogu dokazati taj identitet. Nikada se ne bi smjele pohranjivati korisničke vjerodajnice, pa stoga, ako se WS Security koristi za pozivanje web servisa, treba napomenuti da web servis ne bi smio pohranjivati vjerodajnice koje se šalju u SOAP zaglavlju. Web servis bi ih trebao odbaciti.














