Tutorial de securitate Web Service(WS) cu exemplu SOAP
Ce este WS Security?
WS Security este un standard care abordează securitatea atunci când datele sunt schimbate ca parte a unui serviciu web. Aceasta este o caracteristică cheie a SOAP care îl face foarte popular pentru crearea de servicii web.
Securitatea este o caracteristică importantă în orice aplicație web. Deoarece aproape toate aplicațiile web sunt expuse internetului, există întotdeauna șansa unei amenințări de securitate la adresa aplicațiilor web. Prin urmare, atunci când dezvoltați aplicații bazate pe web, este întotdeauna recomandat să vă asigurați că aplicația este proiectată și dezvoltată având în vedere securitatea.
Amenințări de securitate și contramăsuri
Pentru a înțelege amenințările de securitate care pot fi ostile unei aplicații web, să ne uităm la un scenariu simplu al unei aplicații web și să vedem cum funcționează în termeni de securitate.
Una dintre măsurile de securitate disponibile pentru HTTP este protocolul HTTPS. HTTPS este modalitatea sigură de comunicare între client și server prin web. HTTPS folosește stratul Secure Sockets sau SSL pentru comunicarea sigură. Atât clientul, cât și serverul vor avea un certificat digital pentru a se identifica ca autentici atunci când are loc orice comunicare între client și server.
Într-o comunicare HTTPS standard între client și server, au loc următorii pași
- Clientul trimite o cerere către server prin intermediul certificatului de client. Când serverul vede certificatul client, face o notă în sistemul său cache, astfel încât să știe că răspunsul ar trebui să se întoarcă numai la acest client.
- Serverul se autentifică apoi către client prin trimiterea certificatului său. Acest lucru asigură că clientul comunică cu serverul potrivit.
- Toate comunicările ulterioare dintre client și server sunt criptate. Acest lucru asigură că, dacă alți utilizatori încearcă să rupă securitatea și să obțină datele necesare, nu le-ar putea citi, deoarece ar fi criptate.
Dar tipul de securitate de mai sus nu va funcționa în toate situațiile. Poate veni un moment în care clientul poate vorbi cu mai multe servere. Un exemplu de mai jos arată un client care vorbește atât cu o bază de date, cât și cu un server web în același timp. În astfel de cazuri, nu toate informațiile pot trece prin protocolul https.
Aici intervine SOAP pentru a depăși astfel de obstacole prin implementarea specificației WS Security. Cu această specificație, toate datele legate de securitate sunt definite în elementul antet SOAP.
Elementul antet poate conține informațiile menționate mai jos
- Dacă mesajul din corpul SOAP a fost semnat cu orice cheie de securitate, acea cheie poate fi definită în elementul antet.
- Dacă orice element din corpul SOAP este criptat, antetul ar conține cheile de criptare necesare, astfel încât mesajul să poată fi decriptat când ajunge la destinație.
Într-un mediu de server multiplu, tehnica de mai sus de autentificare SOAP ajută în felul următor.
- Deoarece corpul SOAP este criptat, acesta va putea fi decriptat doar de serverul web care găzduiește serviciul web. Acest lucru se datorează modului în care este proiectat protocolul SOAP.
- Să presupunem că dacă mesajul este transmis serverului bazei de date într-o cerere HTTP, acesta nu poate fi decriptat deoarece baza de date nu are mecanismele potrivite pentru a face acest lucru.
- Numai când cererea ajunge efectiv la serverul Web ca protocol SOAP, acesta va putea descifra mesajul și va trimite răspunsul corespunzător înapoi clientului.
Vom vedea în subiectele ulterioare cum poate fi utilizat standardul WS Security SOAP.
Standarde de securitate a serviciilor web
După cum sa discutat în secțiunea anterioară, standardul WS-Security se bazează pe includerea definiției de securitate în antetul SOAP.
Acreditările din antetul SOAP sunt gestionate în 2 moduri.
În primul rând, definește un element special numit UsernameToken. Acesta este folosit pentru a transmite numele de utilizator și parola serviciului web.
Cealaltă modalitate este să utilizați un token binar prin BinarySecurityToken. Acesta este utilizat în situațiile în care sunt utilizate tehnici de criptare precum Kerberos sau X.509.
Diagrama de mai jos arată fluxul modului în care funcționează modelul de securitate în WS Security
Mai jos sunt pașii care au loc în fluxul de lucru de mai sus
- O solicitare poate fi trimisă de la clientul serviciului web către Serviciul Token de securitate. Acest serviciu poate fi un serviciu web intermediar care este construit special pentru a furniza nume de utilizator/parole sau certificate serviciului web SOAP real.
- Jetonul de securitate este apoi transmis clientului serviciului Web.
- Clientul serviciului Web a apelat apoi serviciul web, dar, de data aceasta, asigurându-se că jetonul de securitate este încorporat în mesajul SOAP.
- Serviciul Web înțelege apoi mesajul SOAP cu jetonul de autentificare și poate contacta apoi serviciul Security Token pentru a vedea dacă jetonul de securitate este autentic sau nu.
Fragmentul de mai jos arată formatul părții de autentificare care face parte din documentul WSDL. Acum, pe baza fragmentului de mai jos, mesajul SOAP va conține 2 elemente suplimentare, unul fiind numele de utilizator și celălalt fiind parola.
<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>
Când mesajul SOAP este transmis efectiv între clienți și server, partea din mesaj care conține acreditările utilizatorului ar putea arăta ca cea prezentată mai sus. Numele elementului wsse este un element special numit definit pentru SOAP și înseamnă că conține informații bazate pe securitate.
Cum să construiți servicii web sigure
Acum să ne uităm la exemplul de securitate a serviciului web SOAP. Vom construi un serviciu web de securitate pe baza exemplului demonstrat mai devreme în capitolul SOAP și îi vom adăuga un strat de securitate.
În exemplul nostru, vom crea un serviciu web simplu, care va fi folosit pentru a returna un șir aplicației care apelează serviciul web. Dar de data aceasta, atunci când serviciul web este invocat, acreditările trebuie să fie furnizate serviciului de apelare. Să urmăm pașii de mai jos pentru a crea serviciul nostru web SOAP și pentru a-i adăuga definiția de securitate.
Pas 1) Primul pas este să creați un gol Asp.Net Aplicație web. Din Visual Studio 2013, faceți clic pe opțiunea de meniu Fișier->Proiect nou.
Odată ce faceți clic pe opțiunea Proiect nou, Visual Studio vă va oferi apoi o altă casetă de dialog pentru alegerea tipului de proiect și pentru a oferi detaliile necesare ale proiectului. Acest lucru este explicat în pasul următor
Pas 2) În această etapă,
- Asigurați-vă că alegeți mai întâi C# șablon web pentru aplicația web ASP.NET. Proiectul trebuie să fie de acest tip pentru a crea un proiect de servicii web. Alegând această opțiune, Visual Studio va efectua apoi pașii necesari pentru a adăuga fișierele necesare care sunt solicitate de orice aplicație bazată pe web.
- Dați un nume pentru proiectul dvs. care, în cazul nostru, a fost dat ca „webservice.asmx.” Apoi asigurați-vă că oferiți o locație, unde vor fi stocate fișierele de proiect.
Odată terminat, veți vedea fișierul de proiect creat în exploratorul de soluții în Visual Studio 2013.
Pas 3) În această etapă,
Vom adăuga un fișier serviciu web la proiectul nostru
- Mai întâi faceți clic dreapta pe fișierul de proiect, așa cum se arată mai jos
- Odată ce faceți clic dreapta pe fișierul de proiect, aveți șansa de a alege opțiunea „Add->Web Service (ASMX) pentru a adăuga un fișier de serviciu web. Doar furnizați un nume de Serviciu de tutorial pentru fișierul cu numele serviciului web.
Pasul de mai sus va afișa o casetă de dialog, în care se poate introduce numele fișierului serviciului web. Deci, în caseta de dialog de mai jos, introduceți numele TutorialService ca nume de fișier.
Pas 4) Adăugați următorul cod în fișierul asmx al serviciului de instruire. Fragmentul de cod de mai jos este folosit pentru a adăuga o clasă personalizată care va fi folosită pentru a schimba antetul SOAP atunci când mesajul SOAP este generat. Deoarece acum dorim să adăugăm acreditări de securitate la antetul SOAP, acest pas este necesar.
return "This is a Guru99 Web Service"; } public class AuthHeader : SoapHeader { public string UserName; public string Password; } }
Explicația codului: -
- Acum creăm o clasă separată numită AuthHeader care este de tip Clasa SoapHeader. Ori de câte ori doriți să schimbați ceea ce este transmis în antetul SOAP, trebuie să creați o clasă care să folosească clasa SoapHeader încorporată a .Net. Prin personalizarea antetului SOAP, avem acum capacitatea de a transmite un „Nume de utilizator” și „Parolă” atunci când serviciul web este apelat.
- Definim apoi variabilele „UserName” și „Password” care sunt de tip șir. Acestea vor fi folosite pentru a păstra valorile numelui de utilizator și parolei care sunt transmise serviciului web.
Pas 5) Ca pas următor, următorul cod trebuie adăugat la acesta Fișier TutorialService.asmx. Acest cod definește de fapt funcția serviciului nostru web. Această funcție returnează clientului un șir „Acesta este un serviciu web Guru99”. Dar de această dată, șirul va fi returnat doar dacă aplicația client transmite acreditările serviciului web.
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"; }
Explicația codului: -
- Aici, creăm un obiect al clasei AuthHeader care a fost creat în pasul anterior. Acest obiect va fi transmis la noi Guru99Webservice în care numele de utilizator și parola pot fi examinate îndeaproape.
- Atributul [SoapHeader] este folosit acum pentru a specifica că atunci când serviciul Web este apelat, trebuie să i se transmită numele de utilizator și parola.
- În acest bloc de cod, examinăm de fapt numele de utilizator și parola transmise atunci când serviciul web este apelat. Dacă numele de utilizator este egal cu „Guru99” și parola este egală cu „Guru99Password”, atunci mesajul „Acesta este un serviciu web Guru99” este transmis clientului. În caz contrar, o eroare va fi trimisă clientului dacă sunt transmise id-ul de utilizator și parola greșite.
Dacă codul este executat cu succes, următoarea ieșire va fi afișată atunci când rulați codul în browser.
ieșire:
Ieșirea de mai sus este afișată când programul este rulat, ceea ce înseamnă că serviciul Web este acum disponibil. Să facem clic pe Serviciu Descriptlegătură ionică.
Din descrierea serviciului, acum veți putea vedea că numele de utilizator și parola sunt elemente ale wsdl fişier. Acești parametri trebuie să fie trimiși atunci când serviciul web este invocat.
Cele mai bune practici de securitate a serviciului web
Următoarele sunt considerentele de securitate care trebuie luate în considerare atunci când lucrați cu servicii Web
1. Audit și management de jurnal – Utilizați înregistrarea aplicației pentru a înregistra toate solicitările, care vin către serviciile web. Acesta oferă un raport detaliat despre cine a invocat serviciul web și poate ajuta la analiza impactului dacă are loc vreo încălcare a securității.
2. Fluxul de apeluri către serviciul web – Încercați să observați fluxul apelurilor în serviciile web. În mod implicit, o aplicație poate apela mai multe cereri de servicii web cu jetoane de autentificare transmise între aceste servicii web. Toate apelurile dintre serviciile web trebuie monitorizate și înregistrate.
3. Informații sensibile – Nu includeți informații sensibile în intrările dvs. de jurnal, cum ar fi parolele sau numerele cărților de credit sau orice fel de alte informații confidențiale. Dacă există un eveniment care conține oricare dintre aceste informații, acesta trebuie să fie eliminat înainte de a vă conecta.
4. Urmăriți afaceri Operații – Urmăriți operațiunile comerciale semnificative. De exemplu, instrumentați aplicația pentru a înregistra accesul la metode deosebit de sensibile și logica de afaceri. Să luăm un exemplu de aplicație de cumpărături online. Există mai mulți pași într-o aplicație tipică, cum ar fi alegerea articolelor care urmează să fie achiziționate, articolele încărcate în coș și apoi achiziția finală. Întregul flux de lucru al afacerii trebuie urmărit de serviciul web.
5. Autentificare adecvată – Autentificarea este mecanismul prin care clienții își pot stabili identitatea cu serviciul web folosind un anumit set de acreditări care pot dovedi acea identitate. Nu trebuie să stocați niciodată acreditările utilizatorului și, prin urmare, dacă WS Security este utilizat pentru a apela serviciul web, trebuie remarcat că serviciul web nu ar trebui să stocheze acreditările care sunt trimise în antetul SOAP. Acestea ar trebui să fie eliminate de serviciul web.
Rezumat
- SOAP oferă un strat suplimentar numit WS Security pentru a oferi securitate suplimentară atunci când se fac apeluri către serviciile Web.
- WS Security poate fi apelat cu un simplu nume de utilizator sau o parolă sau poate fi folosit cu certificate binare pentru autentificare
- Am văzut asta în .Net putem personaliza serviciul Web pentru ca un nume de utilizator și o parolă să fie transmise ca parte a elementului antet SOAP.