„Web Service“ (WS) saugos pamoka su SOAP pavyzdžiu

Turinys:

Anonim

Kas yra WS sauga?

„WS Security“ yra standartas, sprendžiantis saugumą, kai duomenimis keičiamasi kaip žiniatinklio paslaugos dalį. Tai yra pagrindinė SOAP savybė, dėl kurios ji labai populiari kuriant žiniatinklio paslaugas.

Saugumas yra svarbi bet kurios žiniatinklio programos funkcija. Kadangi beveik visos žiniatinklio programos veikia internetą, žiniatinklio programoms visada kyla grėsmė saugumui. Taigi, kuriant žiniatinklio programas, visada rekomenduojama užtikrinti, kad programa būtų kuriama ir kuriama atsižvelgiant į saugumą.

Šioje pamokoje sužinosite

  • Grėsmės saugumui ir atsakomoji priemonė
  • Žiniatinklio paslaugų saugos standartai
  • Kaip sukurti saugias interneto paslaugas
  • Geriausia žiniatinklio paslaugų saugumo praktika

Grėsmės saugumui ir atsakomoji priemonė

Norėdami suprasti grėsmes saugumui, kurios gali būti priešiškos interneto programai, pažvelkime į paprastą žiniatinklio programos scenarijų ir pažiūrėkime, kaip ji veikia saugumo požiūriu.

Viena iš HTTP prieinamų saugumo priemonių yra HTTPS protokolas. HTTPS yra saugus bendravimo tarp kliento ir serverio būdas internete. HTTPS saugiam ryšiui naudoja „Secure Sockets“ sluoksnį arba SSL. Tiek klientas, tiek serveris turės skaitmeninį sertifikatą, kad atpažintų save kaip tikrus, kai bet koks ryšys tarp kliento ir serverio vyksta.

Standartiniame HTTPS ryšyje tarp kliento ir serverio atliekami šie veiksmai

  1. Klientas siunčia užklausą serveriui per kliento sertifikatą. Kai serveris pamato kliento sertifikatą, jis talpyklos sistemoje užrašo, kad žinotų, jog atsakymas turėtų grįžti tik šiam klientui.
  2. Tada serveris autentifikuoja klientą, siųsdamas jo sertifikatą. Tai užtikrina, kad klientas bendrauja su tinkamu serveriu.
  3. Vėliau visas ryšys tarp kliento ir serverio yra užšifruotas. Tai užtikrina, kad jei kiti vartotojai bandys sugadinti saugumą ir gauti reikalingus duomenis, jie negalės jų perskaityti, nes jie bus užšifruoti.

Tačiau aukščiau nurodytas saugumo tipas neveiks visose situacijose. Gali ateiti laikas, kai klientas gali kalbėtis su keliais serveriais. Žemiau pateiktame pavyzdyje klientas vienu metu kalba tiek su duomenų baze, tiek su interneto serveriu. Tokiais atvejais ne visa informacija gali praeiti per „https“ protokolą.

Čia SOAP imasi veiksmų, kad įveiktų tokias kliūtis, turėdamas WS saugumo specifikaciją. Pagal šią specifikaciją visi su sauga susiję duomenys apibrėžiami SOAP antraštės elemente.

Antraštės elemente gali būti žemiau nurodyta informacija

  1. Jei SOAP turinio pranešimas buvo pasirašytas bet kuriuo saugos raktu, tą raktą galima apibrėžti antraštės elemente.
  2. Jei kuris nors „SOAP Body“ elementas yra užšifruotas, antraštėje būtų būtini šifravimo raktai, kad pranešimą būtų galima iššifruoti, kai jis pasiekia tikslą.

Kelių serverių aplinkose aukščiau nurodyta SOAP autentifikavimo technika padeda tokiu būdu.

  • Kadangi SOAP turinys yra užšifruotas, jį iššifruoti galės tik žiniatinklio serveris, kuriame yra žiniatinklio paslauga. Taip yra dėl to, kaip sukurtas SOAP protokolas.
  • Tarkime, jei pranešimas perduodamas duomenų bazės serveriui HTTP užklausoje, jo negalima iššifruoti, nes duomenų bazė neturi tam tinkamų mechanizmų.
  • Tik tada, kai užklausa iš tikrųjų pasiekia žiniatinklio serverį kaip SOAP protokolas, ji galės iššifruoti pranešimą ir išsiųsti atitinkamą atsakymą klientui.

Tolesnėse temose pamatysime, kaip WS saugumo standartą galima naudoti SOAP.

Žiniatinklio paslaugų saugos standartai

Kaip buvo aptarta ankstesniame skyriuje, WS-Security standartas sukasi apie tai, kad saugos apibrėžimas yra įtrauktas į SOAP antraštę.

SOAP antraštės kredencialai valdomi dviem būdais.

Pirma, jis apibrėžia specialų elementą, vadinamą „UserToken“. Tai naudojama norint perduoti vartotojo vardą ir slaptažodį žiniatinklio tarnybai.

Kitas būdas yra naudoti dvejetainį žetoną per „BinarySecurityToken“. Tai naudojama situacijose, kai naudojamos tokios šifravimo technikos kaip Kerberos arba X.509.

Žemiau pateiktoje diagramoje parodyta, kaip veikia saugos modelis „WS ​​Security“

Toliau pateikiami veiksmai, kurie atliekami pirmiau pateiktoje darbo eigoje

  1. Užklausą iš žiniatinklio paslaugų kliento galima nusiųsti „Security Token Service“. Ši paslauga gali būti tarpinė žiniatinklio paslauga, specialiai sukurta tiekti vartotojo vardus / slaptažodžius ar sertifikatus tikrajai SOAP žiniatinklio paslaugai.
  2. Tada saugos prieigos raktas perduodamas žiniatinklio tarnybos klientui.
  3. Tada žiniatinklio tarnybos klientas paskambino į žiniatinklio tarnybą, tačiau šį kartą užtikrindamas, kad saugos žetonas būtų įterptas į SOAP pranešimą.
  4. Tada žiniatinklio tarnyba supranta SOAP pranešimą su autentifikavimo prieigos raktu ir gali susisiekti su saugos žetonų tarnyba ir sužinoti, ar saugos žetonas yra autentiškas, ar ne.

Žemiau pateiktame fragmente parodomas autentifikavimo dalies, kuri yra WSDL dokumento dalis, formatas. Dabar, remiantis toliau pateiktu fragmentu, SOAP pranešime bus 2 papildomi elementai, vienas iš jų yra vartotojo vardas, kitas - slaptažodis.

Kai SOAP pranešimas iš tikrųjų perduodamas tarp klientų ir serverio, pranešimo dalis, kurioje yra vartotojo kredencialai, gali atrodyti kaip parodyta aukščiau. „Wsse“ elemento pavadinimas yra specialus elementas, pavadintas SOAP ir reiškia, kad jame yra saugumu pagrįsta informacija.

Kaip sukurti saugias interneto paslaugas

Dabar pažvelkime į SOAP žiniatinklio paslaugų saugos pavyzdį. Žiniatinklio paslaugų saugumą sukursime pagal pavyzdį, kuris buvo parodytas anksčiau SOAP skyriuje, ir pridėsime prie jo saugos sluoksnį.

Savo pavyzdyje ketiname sukurti paprastą žiniatinklio paslaugą, kuri bus naudojama norint grąžinti eilutę programai, kuri iškviečia žiniatinklio paslaugą. Tačiau šį kartą, kai naudojama interneto paslauga, kredencialus reikia pateikti skambinančiajai tarnybai. Atlikime šiuos veiksmus, kad sukurtume savo SOAP žiniatinklio paslaugą ir pridėtume prie jos saugos apibrėžimą.

1 žingsnis) Pirmasis žingsnis yra sukurti tuščią „Asp.Net“ žiniatinklio programą. „Visual Studio 2013“ spustelėkite meniu parinktį Failas-> Naujas projektas.

Kai spustelėsite parinktį Naujas projektas, „Visual Studio“ suteiks jums kitą dialogo langą, kuriame galėsite pasirinkti projekto tipą ir pateikti reikiamą projekto informaciją. Tai paaiškinama kitame žingsnyje

2 žingsnis) Šiame žingsnyje

  1. Įsitikinkite, kad pirmiausia pasirinkote C # žiniatinklio šabloną, skirtą ASP.NET žiniatinklio programai. Projektas turi būti tokio tipo, kad būtų galima sukurti interneto paslaugų projektą. Pasirinkusi šią parinktį, „Visual Studio“ atliks būtinus veiksmus, kad pridėtų reikiamus failus, kurių reikalauja bet kuri žiniatinklio programa.
  2. Pavadinkite savo projektą, kuris mūsų atveju buvo suteiktas kaip „ webservice.asmx “. Tada įsitikinkite, kad nurodėte vietą, kurioje bus saugomi projekto failai.

Kai tai padarysite, pamatysite projekto failą, sukurtą jūsų sprendimų naršyklėje „Visual Studio 2013“.

3 žingsnis) Šiame žingsnyje

Prie savo projekto ketiname pridėti žiniatinklio paslaugų failą

  1. Pirmiausia dešiniuoju pelės mygtuku spustelėkite projekto failą, kaip parodyta žemiau
  1. Dešiniuoju pelės mygtuku spustelėję projekto failą, turite galimybę pasirinkti parinktį „Pridėti-> žiniatinklio tarnyba (ASMX), kad pridėtumėte žiniatinklio paslaugos failą. Tiesiog pateikite žiniatinklio paslaugos pavadinimo failo„ Tutorial Service “pavadinimą.

Pirmiau nurodytas veiksmas paskatins dialogo langą, kuriame galima įvesti žiniatinklio paslaugos failo pavadinimą. Taigi žemiau esančiame dialogo lange įveskite „TutorialService“ pavadinimą kaip failo pavadinimą.

4 žingsnis) Įtraukite šį kodą į savo „Tutorial Service“ asmx failą. Žemiau pateiktas kodo fragmentas naudojamas pridėti pasirinktinę klasę, kuri bus naudojama norint pakeisti SOAP antraštę, kai generuojamas SOAP pranešimas. Kadangi dabar norime prie SOAP antraštės pridėti saugos kredencialus, reikia atlikti šį veiksmą.

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

Kodo paaiškinimas: -

  1. Dabar kuriame atskirą „ AuthHeader“ klasę, kuri yra „ SoapHeader“ tipo . Kai norite pakeisti tai, kas perduodama SOAP antraštėje, reikia sukurti klasę, kurioje būtų naudojama integruota .Net „SoapHeader“ klasė. Tinkindami SOAPheader, dabar turime galimybę perduoti „vartotojo vardą“ ir „slaptažodį“, kai iškviečiama žiniatinklio paslauga.
  2. Tada mes apibrėžiame „UserName“ ir „Password“ kintamuosius, kurie yra tipo eilutės. Jie bus naudojami vartotojo vardo ir slaptažodžio, perduodamo žiniatinklio tarnybai, reikšmėms laikyti.

5 žingsnis) Kaip kitą veiksmą, tą patį failą „TutorialService.asmx“ reikia pridėti šį kodą . Šis kodas iš tikrųjų apibrėžia mūsų žiniatinklio paslaugos funkciją. Ši funkcija klientui grąžina eilutę „Tai yra„ Guru99 “tinklo paslauga“. Tačiau šį kartą eilutė bus grąžinta tik tuo atveju, jei kliento programa perduos prisijungimo duomenis žiniatinklio tarnybai.

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

Kodo paaiškinimas: -

  1. Čia mes kuriame „AuthHeader“ klasės objektą, kuris buvo sukurtas ankstesniame etape. Šis objektas bus perduotas mūsų „ Guru99Webservice“ , kuriame bus atidžiai išnagrinėtas vartotojo vardas ir slaptažodis.
  2. Atributas [SoapHeader] dabar naudojamas norint nurodyti, kad iškviečiant žiniatinklio paslaugą reikia perduoti vartotojo vardą ir slaptažodį.
  3. Šiame kodo bloke mes tikriname vartotojo vardą ir slaptažodį, perduotus iškvietus žiniatinklio paslaugą. Jei vartotojo vardas yra lygus „Guru99“, o slaptažodis lygus „Guru99Password“, klientui perduodamas pranešimas „Tai yra„ Guru99 “interneto paslauga“. Kita klaida bus išsiųsta klientui, jei bus perduotas neteisingas vartotojo ID ir slaptažodis.

Jei kodas sėkmingai įvykdytas, paleidus kodą naršyklėje bus rodoma ši išvestis.

Išvestis:

Pirmiau pateiktas išvestis rodoma, kai programa yra paleista, o tai reiškia, kad dabar yra prieinama žiniatinklio paslauga. Spustelėkite nuorodą Paslaugos aprašas.

Iš paslaugos aprašymo dabar galėsite pamatyti, kad vartotojo vardas ir slaptažodis yra WSDL failo elementai. Šiuos parametrus reikia išsiųsti, kai naudojama interneto paslauga.

Geriausia žiniatinklio paslaugų saugumo praktika

Toliau pateikiami saugos aspektai, į kuriuos reikia atkreipti dėmesį dirbant su interneto paslaugomis

  1. Auditas ir žurnalo tvarkymas - naudokite programų registravimą registruodami visas užklausas, kurios pateikiamos žiniatinklio tarnybose. Tai pateikia išsamią ataskaitą apie tai, kas pasinaudojo žiniatinklio paslauga, ir gali padėti atlikti poveikio analizę, jei įvyktų koks nors saugos pažeidimas.

  2. Skambučių srautas į žiniatinklio tarnybą - pabandykite atkreipti dėmesį į skambučių srautą žiniatinklio tarnybose. Pagal numatytuosius nustatymus programa gali iškviesti kelias žiniatinklio paslaugų užklausas naudodama autentifikavimo žetonus, perduotus tarp šių žiniatinklio paslaugų. Visi skambučiai tarp interneto paslaugų turi būti stebimi ir registruojami.

  3. Slapta informacija - į savo žurnalo įrašus neįtraukite neskelbtinos informacijos, tokios kaip slaptažodžiai ar kreditinių kortelių numeriai, ar kitos konfidencialios informacijos. Jei yra įvykis, turintis bet kurią iš šios informacijos, jis turi būti atmestas prieš prisijungiant.

  4. Stebėti verslo operacijas - stebėti reikšmingas verslo operacijas. Pavyzdžiui, užprogramuokite savo programą, kad įrašytumėte prieigą prie ypač jautrių metodų ir verslo logikos. Paimkime internetinės aplikacijos programos pavyzdį. Įprastoje programoje yra keli veiksmai, pvz., Įsigyjamų prekių pasirinkimas, į krepšelį įkeliamos prekės ir tada galutinis pirkimas. Interneto tarnyba turi stebėti visą šią verslo eigą.

  5. Tinkamas autentifikavimas - autentifikavimas yra mechanizmas, kuriuo klientai gali nustatyti savo tapatybę žiniatinklio tarnyboje naudodamiesi tam tikrais įgaliojimų rinkiniais, kurie gali patvirtinti tą tapatybę. Niekada nereikėtų saugoti vartotojo prisijungimo duomenų, taigi, jei WS Security naudojamas žiniatinklio tarnybai iškviesti, reikia pažymėti, kad žiniatinklio tarnyba neturėtų saugoti prisijungimo duomenų, siunčiamų SOAP antraštėje. Tai turėtų išmesti žiniatinklio tarnyba.

Santrauka

  • SOAP suteikia papildomą sluoksnį, vadinamą WS sauga, kad užtikrintų papildomą saugumą, kai skambinama į interneto paslaugas.
  • „WS Security“ galima iškviesti naudojant paprastą vartotojo vardą ar slaptažodį arba jį galima naudoti kartu su „Dvejetainiais“ sertifikatais
  • Mes matėme, kad .Net mes galime pritaikyti žiniatinklio paslaugą, kad vartotojo vardas ir slaptažodis būtų perduoti kaip SOAP antraštės elemento dalis.