Vodič za sigurnost web usluga (WS) sa primjerom SOAP-a

Sadržaj:

Anonim

Što je WS Security?

WS Security je standard koji se odnosi na sigurnost 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 bilo koje web aplikacije. Budući da su gotovo sve web aplikacije izložene internetu, uvijek postoji vjerojatnost sigurnosne prijetnje web aplikacijama. Stoga se prilikom razvijanja web-aplikacija uvijek preporučuje osigurati da aplikacija bude dizajnirana i razvijena s pažnjom na sigurnost.

U ovom vodiču naučit ćete-

  • Sigurnosne prijetnje i protumjere
  • Standardi sigurnosti web usluga
  • Kako izraditi sigurne web usluge
  • Najbolji postupci za sigurnost web usluga

Sigurnosne prijetnje i protumjere

Da bismo razumjeli sigurnosne prijetnje koje mogu biti neprijateljske prema web aplikaciji, pogledajmo jednostavan scenarij web aplikacije i vidjet ćemo 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 sloj Secure Sockets ili SSL za sigurnu komunikaciju. I klijent i poslužitelj imat će digitalni certifikat kojim će se prepoznati kao izvorne u slučaju bilo kakve komunikacije između klijenta i poslužitelja.

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

  1. Klijent šalje zahtjev poslužitelju putem certifikata klijenta. Kad poslužitelj vidi klijentski certifikat, bilježi u svoj sustav predmemorije tako da zna da bi se odgovor trebao vratiti samo ovom klijentu.
  2. Poslužitelj se zatim ovjerava klijentu slanjem svog certifikata. To osigurava da klijent komunicira s pravim poslužiteljem.
  3. Sva komunikacija nakon toga između klijenta i poslužitelja je šifrirana. To osigurava da ako bilo koji drugi korisnik pokuša slomiti sigurnost i dobiti potrebne podatke, neće ih moći pročitati jer će biti šifrirani.

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

Tu SOAP stupa u akciju kako bi prevladao takve prepreke postavljanjem WS sigurnosne specifikacije. Ovom specifikacijom svi podaci povezani sa sigurnošću definirani su u elementu zaglavlja SOAP.

Element zaglavlja može sadržavati dolje navedene informacije

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

U više poslužiteljskih okruženja, gore navedena tehnika SOAP provjere autentičnosti pomaže na sljedeći način.

  • Budući da je SOAP tijelo šifrirano, dešifrirati će ga moći samo web poslužitelj koji je domaćin web usluzi. To je zbog načina na koji je dizajniran SOAP protokol.
  • Pretpostavimo ako se poruka proslijedi poslužitelju baze podataka u HTTP zahtjevu, ne može se dešifrirati jer baza podataka nema ispravne mehanizme za to.
  • Tek kada zahtjev stvarno dođe na web poslužitelj kao SOAP protokol, moći će dešifrirati poruku i poslati odgovarajući odgovor natrag klijentu.

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

Standardi sigurnosti web usluga

Kao što je raspravljeno u prethodnom odjeljku, standard WS-Security vrti se oko toga da sigurnosna definicija bude uključena u SOAP zaglavlje.

Vjerodajnicama u zaglavlju SOAP-a upravlja se na dva načina.

Prvo, definira poseban element pod nazivom UsernameToken. To se koristi za prosljeđivanje korisničkog imena i lozinke web usluzi.

Drugi način je korištenje Binarnog žetona putem BinarySecurityToken. To se koristi u situacijama u kojima se koriste tehnike šifriranja kao što su Kerberos ili X.509.

Dijagram u nastavku prikazuje tijek funkcioniranja sigurnosnog modela u WS Security

Ispod su koraci koji se odvijaju u gore navedenom tijeku rada

  1. Zahtjev se može poslati iz klijenta web usluge usluzi Security Token Service. Ova usluga može biti intermedijarna web usluga koja je posebno izgrađena za pružanje korisničkih imena / lozinki ili certifikata stvarnoj SOAP web usluzi.
  2. Sigurnosni token se zatim prosljeđuje klijentu web usluge.
  3. Klijent web usluge tada je nazvao web uslugu, ali ovoga puta osiguravajući da je sigurnosni token ugrađen u SOAP poruku.
  4. Web usluga tada razumije SOAP poruku s tokenom za provjeru autentičnosti, a zatim može kontaktirati uslugu Security Token da provjeri je li sigurnosni token autentičan ili nije.

Isječak u nastavku prikazuje format dijela za provjeru autentičnosti koji je dio WSDL dokumenta. Sada na temelju donjeg isječka, SOAP poruka sadržavat će 2 dodatna elementa, jedan je Korisničko ime, a drugi Lozinka.

Kada se SOAP poruka stvarno proslijedi između klijenata i poslužitelja, dio poruke koji sadrži vjerodajnice korisnika mogao bi izgledati poput gore prikazanog. Ime elementa wsse poseban je element imenovan definiran za SOAP i znači da sadrži informacije temeljene na sigurnosti.

Kako izraditi sigurne web usluge

Pogledajmo sada primjer sigurnosti sigurnosnih web web usluga. Izgradit ćemo sigurnost web usluge na primjeru prikazanom ranije u poglavlju SOAP te ćemo joj dodati sigurnosni sloj.

U našem primjeru stvorit ćemo jednostavnu web uslugu koja će se koristiti za vraćanje niza u aplikaciju koja poziva web uslugu. Ali ovaj put, otprilike kad se poziva web usluga, vjerodajnice treba dostaviti pozivajućoj službi. Slijedimo korake u nastavku kako bismo stvorili našu web uslugu SOAP i dodali joj sigurnosnu definiciju.

Korak 1) Prvi korak je stvaranje prazne web aplikacije Asp.Net. U Visual Studio 2013 kliknite opciju izbornika Datoteka-> Novi projekt.

Jednom kada kliknete opciju Novi projekt, Visual Studio će vam dati još jedan dijaloški okvir za odabir vrste projekta i davanje potrebnih detalja o projektu. To je objašnjeno u sljedećem koraku

Korak 2) U ovom koraku,

  1. Prvo odaberite C # web predložak za web-aplikaciju ASP.NET. Projekt mora biti ove vrste da bi se stvorio projekt web usluga. Odabirom ove opcije Visual Studio će zatim izvršiti potrebne korake za dodavanje potrebnih datoteka koje zahtijeva bilo koja web-aplikacija.
  2. Navedite ime za svoj projekt koji je u našem slučaju dobio naziv " webservice.asmx. " Zatim navedite mjesto na kojem će se datoteke projekta čuvati.

Nakon završetka vidjet ćete datoteku projekta stvorenu u vašem istraživaču rješenja u Visual Studio 2013.

Korak 3) U ovom koraku,

U naš ćemo projekt dodati datoteku web usluge

  1. Prvo desnom tipkom miša kliknite datoteku projekta kao što je prikazano u nastavku
  1. Jednom kada desnom tipkom miša kliknete datoteku projekta, imat ćete priliku odabrati opciju "Dodaj-> Web usluga (ASMX) za dodavanje datoteke web usluge. Samo navedite naziv Tutorial Service za datoteku naziva web usluge.

Gornji korak zatražit će dijaloški okvir u koji se može unijeti ime datoteke web usluge. Dakle, u donji dijaloški okvir unesite naziv TutorialService kao naziv datoteke.

Korak 4) Dodajte sljedeći kôd u svoju datoteku asmx Tutorial Service. Isječak koda u nastavku koristi se za dodavanje prilagođene klase koja će se koristiti za promjenu zaglavlja SOAP-a kada se generira SOAP poruka. Budući da sada želimo dodati sigurnosne vjerodajnice u zaglavlje SOAP-a, potreban je ovaj korak.

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 koja se naziva AuthHeader koja je tipa SoapHeader . Kad god želite promijeniti ono što se prosljeđuje u zaglavlju SOAP, treba stvoriti klasu koja koristi ugrađenu klasu SoapHeader .Net. Prilagođavanjem SOAPheader-a, sada imamo mogućnost prosljeđ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 usluzi.

Korak 5) Kao sljedeći korak, sljedeći kôd treba dodati u istu datoteku TutorialService.asmx . Ovaj kôd zapravo definira funkciju naše web usluge. Ova funkcija klijentu vraća niz "Ovo je Guru99 web usluga". No, ovaj put će se niz vratiti samo ako klijentska aplikacija preda vjerodajnice web usluzi.

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);}eisereturn "This is a Guru99 Web service";}

Objašnjenje koda: -

  1. Ovdje stvaramo objekt klase AuthHeader koji je stvoren u prethodnom koraku. Ovaj će se objekt proslijediti našoj Guru99Webservice u kojoj se može pažljivo ispitati korisničko ime i lozinka.
  2. Atribut [SoapHeader] sada se koristi za specificiranje da prilikom pozivanja web usluge mora imati proslijeđeno korisničko ime i lozinku.
  3. U ovom bloku koda zapravo ispitujemo korisničko ime i lozinku proslijeđene kada se pozove web usluga. Ako je Korisničko ime jednako "Guru99", a lozinka jednaka "Guru99Password", tada se poruka "Ovo je Guru99 web usluga" prenosi klijentu. Inače će se pogreška poslati klijentu ako se proslijede pogrešni korisnički ID i lozinka.

Ako se kôd uspješno izvrši, sljedeći će se izlaz prikazati kada pokrenete svoj kôd u pregledniku.

Izlaz:

Gornji izlaz prikazan je prilikom pokretanja programa, što znači da je web usluga sada dostupna. Kliknimo na vezu Opis usluge.

Iz opisa usluge sada ćete moći vidjeti da su korisničko ime i lozinka elementi WSDL datoteke. Te je parametre potrebno poslati kada se pozove web usluga.

Najbolji postupci za sigurnost web usluga

Slijede sigurnosna razmatranja koja treba imati na umu prilikom rada s web uslugama

  1. Revizija i upravljanje zapisima - Koristite zapise aplikacija da biste evidentirali sve zahtjeve koji dolaze na web usluge. To daje detaljno izvješće o tome tko se pozvao na web uslugu i može pomoći u analizi utjecaja ako se dogodi bilo kakvo narušavanje sigurnosti.

  2. Tok poziva web usluzi - Pokušajte primijetiti tijek poziva u web uslugama. Prema zadanim postavkama, aplikacija može pozvati više zahtjeva za web usluge s tokenima za provjeru autentičnosti koji su proslijeđeni između ovih web usluga. Sve pozive između web usluga treba pratiti i bilježiti.

  3. Osjetljive informacije - Ne uvrštavajte osjetljive podatke u svoje zapise, kao što su lozinke ili brojevi kreditnih kartica ili bilo koje druge povjerljive informacije. Ako postoji događaj koji ima bilo koju od ovih informacija, potrebno ga je odbaciti prije prijave.

  4. Prati poslovno poslovanje - Prati značajne poslovne operacije. Na primjer, instrumentirajte svoju aplikaciju za snimanje pristupa posebno osjetljivim metodama i poslovnoj logici. Uzmimo primjer aplikacije za internetsku kupnju. U tipičnoj aplikaciji postoji više koraka, poput odabira predmeta koji se kupuju, predmeta stavljenih u košaricu, a zatim konačne kupnje. Web usluga treba pratiti cijeli taj poslovni tok.

  5. Pravilna autentifikacija - autentifikacija je mehanizam kojim klijenti mogu utvrditi svoj identitet s web uslugom pomoću određenog niza vjerodajnica koje mogu dokazati taj identitet. Nikada ne treba pohranjivati ​​korisničke vjerodajnice, pa stoga, ako se WS Security koristi za pozivanje web usluge, mora se napomenuti da web usluga ne bi trebala pohraniti vjerodajnice poslane u zaglavlju SOAP. Web usluga ih treba odbaciti.

Sažetak

  • SOAP pruža dodatni sloj nazvan WS Security za pružanje dodatne sigurnosti prilikom upućivanja poziva web uslugama.
  • WS Security se može nazvati jednostavnim korisničkim imenom ili lozinkom ili se može koristiti s binarnim certifikatima za provjeru autentičnosti
  • Vidjeli smo da u .Netu možemo prilagoditi web uslugu tako da se korisničko ime i lozinka prosljeđuju kao dio elementa SOAP zaglavlja.