Vodič o sigurnosti web usluge (WS) s primjerom SOAP-a

Što je WS Security?

WS Security je standard koji se bavi sigurnošću kada se podaci razmjenjuju kao dio web usluge. Ovo je ključna značajka u SOAP-u koja ga čini vrlo popularnim za stvaranje web usluga.

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 se pri razvoju aplikacija temeljenih na webu uvijek preporučuje osigurati da je aplikacija dizajnirana i razvijena imajući na umu sigurnost.

Sigurnosne prijetnje i protumjere

Da bismo razumjeli sigurnosne prijetnje koje mogu biti neprijateljske prema web aplikaciji, pogledajmo jednostavan scenarij web aplikacije i vidimo kako 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 sloj sigurnih utičnica ili SSL za sigurnu komunikaciju. I klijent i poslužitelj imat će digitalni certifikat da se identificiraju kao autentični kada dođe do bilo kakve komunikacije između klijenta i poslužitelja.

Sigurnosne prijetnje i protumjere

U standardnoj HTTPS komunikaciji između klijenta i poslužitelja odvijaju se sljedeći koraci

  1. 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.
  2. Poslužitelj se zatim autentificira klijentu slanjem svojeg certifikata. Ovo osigurava da klijent komunicira s pravim poslužiteljem.
  3. Sva komunikacija nakon toga između klijenta i poslužitelja je šifrirana. Ovo osigurava da ako bilo koji drugi korisnik pokuša probiti sigurnost i dobiti tražene podatke, neće ih moći pročitati jer bi bili šifrirani.

Ali gornja vrsta sigurnosti neće funkcionirati u svim situacijama. Može doći vrijeme kada klijent može razgovarati s više poslužitelja. Primjer naveden u nastavku prikazuje klijenta koji istovremeno razgovara i s bazom podataka i s web poslužiteljem. U takvim slučajevima sve informacije ne mogu proći kroz https protokol.

Sigurnosne prijetnje i protumjere

Ovo je mjesto gdje SOAP stupa u akciju kako bi prevladao takve prepreke postavljanjem WS sigurnosne specifikacije. S ovom specifikacijom, svi podaci koji se odnose na sigurnost definirani su u SOAP elementu zaglavlja.

Element zaglavlja može sadržavati dolje navedene informacije

  1. Ako je poruka unutar tijela SOAP-a potpisana bilo kojim sigurnosnim ključem, taj se ključ može definirati u elementu zaglavlja.
  2. Ako je bilo koji element unutar tijela SOAP-a šifriran, zaglavlje bi sadržavalo potrebne ključeve za šifriranje tako da se poruka može dešifrirati kada stigne na odredište.

U okruženjima s više poslužitelja, gornja tehnika SOAP provjere autentičnosti 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 ako se poruka proslijedi poslužitelju baze podataka u HTTP zahtjevu, ne može se dešifrirati jer baza podataka nema prave mehanizme za to.
  • Tek kada zahtjev stvarno stigne do web poslužitelja kao SOAP protokol, moći će dešifrirati poruku i poslati odgovarajući odgovor nazad klijentu.

U sljedećim temama vidjet ćemo kako se WS sigurnosni standard može koristiti SOAP.

Sigurnosni standardi web usluga

Kao što je objašnjeno u prethodnom odjeljku, WS-Security standard vrti se oko uključivanja sigurnosne definicije u SOAP zaglavlje.

Vjerodajnicama u SOAP zaglavlju upravlja se na 2 načina.

Prvo, definira poseban element koji se zove UsernameToken. Ovo se koristi za prosljeđivanje korisničkog imena i lozinke web servisu.

Drugi način je korištenje binarnog tokena putem BinarySecurityTokena. Ovo se koristi u situacijama u kojima se koriste tehnike šifriranja kao što su Kerberos ili X.509.

Donji dijagram prikazuje tijek rada sigurnosnog modela u WS Security

Sigurnosni standardi web usluga

U nastavku su navedeni koraci koji se odvijaju u gornjem tijeku rada

  1. Zahtjev se može poslati s klijenta web usluge na Security Token Service. Ova usluga može biti međuweb usluga koja je posebno napravljena za opskrbu korisničkih imena/lozinki ili certifikata za stvarnu SOAP web uslugu.
  2. Sigurnosni token zatim se prosljeđuje klijentu web usluge.
  3. Klijent web-usluge zatim je pozvao web-uslugu, ali, ovaj put, osiguravajući da je sigurnosni token ugrađen u SOAP poruku.
  4. 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 provjeru autentičnosti koji je dio WSDL dokumenta. Sada, na temelju donjeg isječka, SOAP poruka će sadržavati 2 dodatna elementa, jedan je korisničko ime, a drugi je 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 stvarno proslijedi između klijenata i poslužitelja, dio poruke koji sadrži korisničke vjerodajnice mogao bi izgledati kao onaj prikazan gore. Naziv wsse elementa poseban je element nazvan definiran za SOAP i znači da sadrži informacije temeljene na sigurnosti.

Kako izgraditi sigurne web usluge

Sada pogledajmo primjer sigurnosti web usluge SOAP. Izgradit ćemo sigurnost web usluge na primjeru prikazanom ranije u poglavlju o SOAP-u i dodati joj sigurnosni sloj.

U našem primjeru izradit ćemo jednostavnu web uslugu koja će se koristiti za vraćanje niza aplikaciji koja poziva web uslugu. Ali ovaj put, otprilike, kada se pozove web usluga, vjerodajnice se moraju dostaviti usluzi koja poziva. Slijedimo korake u nastavku kako bismo stvorili našu SOAP web uslugu i dodali joj sigurnosnu definiciju.

Korak 1) Prvi korak je stvaranje praznog Asp.Net Web aplikacija. U Visual Studio 2013 kliknite na opciju izbornika Datoteka->Novi projekt.

Izgradite sigurne web usluge

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

  1. Uvjerite se da prvo odaberete C# web predložak za ASP.NET web aplikaciju. Projekt mora biti ove vrste kako bi se izradio projekt web servisa. Odabirom ove opcije, Visual Studio će potom izvršiti potrebne korake za dodavanje potrebnih datoteka koje su potrebne bilo kojoj web aplikaciji.
  2. Dajte naziv svom projektu koji je u našem slučaju dat kao "webservice.asmx.” Zatim svakako navedite lokaciju na kojoj će datoteke projekta biti pohranjene.

Izgradite sigurne web usluge

Kada završite, vidjet ćete projektnu datoteku stvorenu u vašem pregledniku rješenja u Visual Studio 2013.

Izgradite sigurne web usluge

Korak 3) U ovom koraku

Dodat ćemo datoteku web usluge našem projektu

  1. Prvo desnom tipkom miša kliknite datoteku projekta kao što je prikazano u nastavku

Izgradite sigurne web usluge

  1. Nakon što desnom tipkom miša kliknete datoteku projekta, imate priliku odabrati opciju “Dodaj->Web usluga (ASMX) za dodavanje datoteke web usluge. Samo navedite naziv Tutorial Service za datoteku naziva web usluge.

    Izgradite sigurne web usluge

Gornji korak će pokrenuti dijaloški okvir u koji možete unijeti naziv datoteke web usluge. Stoga u dijaloški okvir u nastavku unesite naziv usluge TutorialService kao naziv datoteke.

Izgradite sigurne web usluge

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.

Izgradite sigurne web usluge

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

	}
}

Objašnjenje koda:-

  1. Sada stvaramo zasebnu klasu pod nazivom AuthHeader koji je tipa Klasa SoapHeader. Kad god želite promijeniti ono što se prosljeđuje u SOAP zaglavlju, potrebno je stvoriti klasu koja koristi ugrađenu klasu SoapHeader .Neta. Prilagodbom SOAPheadera, sada imamo mogućnost proslijeđivanja 'korisničkog imena' i 'lozinke' kada se pozove web usluga.
  2. 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.asmx. Ovaj kod zapravo definira funkciju naše web usluge. Ova funkcija klijentu vraća niz "Ovo je Guru99 Web usluga". Ali ovaj put, niz će biti vraćen samo ako klijentska aplikacija proslijedi vjerodajnice web servisu.

Izgradite sigurne web usluge

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

Objašnjenje koda:-

  1. Ovdje stvaramo objekt klase AuthHeader koji je stvoren u prethodnom koraku. Ovaj objekt će biti proslijeđen našem Web usluga Guru99 u kojem se korisničko ime i lozinka mogu pomno ispitati.
  2. Atribut [SoapHeader] sada se koristi kako bi se specificiralo da kada se pozove web usluga, treba proslijediti korisničko ime i lozinku.
  3. U ovom bloku koda, mi zapravo ispitujemo korisničko ime i lozinku proslijeđene kada se pozove web usluga. Ako je korisničko ime jednako "Guru99", a lozinka je jednaka "Guru99Password", tada se poruka "Ovo je Guru99 web usluga" prosljeđuje klijentu. Inače će se klijentu poslati pogreška ako se proslijede 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:

Izgradite sigurne web usluge

Gornji izlaz se prikazuje kada se program pokrene, što znači da je web usluga sada dostupna. Kliknimo na Servis Descriptionska veza.

Izgradite sigurne web usluge

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 sigurnosna razmatranja na koja treba obratiti pozornost pri radu s web uslugama

1. Revizija i upravljanje zapisima – Koristite bilježenje aplikacije za bilježenje svih zahtjeva koji dolaze web uslugama. To daje detaljno izvješće o tome tko je pozvao web uslugu i može pomoći u analizi utjecaja ako dođe do bilo kakve povrede sigurnosti.

2. Tijek poziva prema web servisu – Pokušajte zabilježiti tijek poziva u web uslugama. Prema zadanim postavkama, aplikacija može pozvati višestruke zahtjeve web-usluga s autentifikacijskim tokenima koji se prosljeđuju između tih web-usluga. Sve pozive između web usluga potrebno je nadzirati i bilježiti.

3. Osjetljive informacije – Nemojte uključivati ​​osjetljive podatke u svoje unose u dnevnik kao što su lozinke ili brojevi kreditnih kartica ili bilo kakve druge povjerljive informacije. Ako postoji događaj koji ima bilo koju od ovih informacija, potrebno ga je odbaciti prije prijave.

4. Pratite poslovanje Operama – Pratite značajne poslovne operacije. Na primjer, instrumentirajte svoju aplikaciju za snimanje pristupa posebno osjetljivim metodama i poslovnoj logici. Uzmimo primjer aplikacije za online kupnju. Postoji više koraka u tipičnoj aplikaciji kao što je odabir stavki za kupnju, stavki učitanih u košaricu i zatim konačna kupnja. Cijeli ovaj poslovni radni tijek mora pratiti web usluga.

5. Pravilna provjera autentičnosti – Autentifikacija je mehanizam kojim klijenti mogu utvrditi svoj identitet s web uslugom pomoću određenog skupa 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 usluge, treba imati na umu da web usluga ne bi trebala pohranjivati ​​vjerodajnice koje se šalju u SOAP zaglavlju. Web servis ih treba odbaciti.

rezime

  • SOAP pruža dodatni sloj pod nazivom WS Security za pružanje dodatne sigurnosti kada se upućuju pozivi web uslugama.
  • WS Security se može pozvati jednostavnim korisničkim imenom ili lozinkom ili se može koristiti s binarnim certifikatima za provjeru autentičnosti
  • To smo vidjeli u .Neto možemo prilagoditi web uslugu tako da se korisničko ime i lozinka prosljeđuju kao dio SOAP elementa zaglavlja.