Securitatea serviciilor web (WS) cu exemplu SOAP
⚡ Rezumat inteligent
Securitatea serviciilor web (WS) este un standard care protejează datele schimbate în timpul unui apel de serviciu web SOAP. Această resursă explică amenințările de securitate și contramăsurile, standardele WS-Security, construirea unui serviciu web securizat cu acreditări și cele mai bune practici de securitate a serviciilor web.
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 în SOAP, ceea ce î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 la internet, există întotdeauna o șansă de amenințare la adresa securității aplicațiilor web. Prin urmare, atunci când se dezvoltă...ping În cazul aplicațiilor web, se recomandă întotdeauna 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ă analizăm un scenariu simplu al unei aplicații web și să vedem cum funcționează aceasta din punct de vedere al securității.
Una dintre măsurile de securitate disponibile pentru HTTP este protocolul HTTPS. HTTPS este modalitatea securizată de comunicare între client și server prin web. HTTPS utilizează Secure Sockets Layer, sau SSL, pentru o comunicare securizată. Atât clientul, cât și serverul vor avea un certificat digital pentru a se identifica ca fiind 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ă spargă securitatea și să obțină datele necesare, nu le vor putea citi deoarece acestea ar fi criptate.
Însă tipul de securitate menționat mai sus nu va funcționa în toate situațiile. Poate veni un moment în care clientul poate comunica cu mai multe servere. Un exemplu de mai jos arată un client care comunică simultan atât cu o bază de date, cât și cu un server web. Î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 următoarele informații:
- Dacă mesajul din corpul SOAP a fost semnat cu orice cheie de securitate, acea cheie poate fi definită în elementul antet.
- Dacă vreun element din corpul SOAP este criptat, antetul ar conține cheile de criptare necesare, astfel încât mesajul să poată fi decriptat atunci când ajunge la destinație.
Într-un mediu cu mai multe servere, tehnica de autentificare SOAP de mai sus 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ă mesajul este transmis serverului bazei de date printr-o cerere HTTP; acesta nu poate fi decriptat deoarece baza de date nu are mecanismele potrivite pentru a face acest lucru.
- Numai atunci când cererea ajunge efectiv la serverul web ca protocol SOAP, acesta va putea descifra mesajul și trimite răspunsul corespunzător înapoi clientului.
Vom vedea în subiectele următoare cum poate fi utilizat standardul WS Security pentru SOAP.
Standarde de securitate a serviciilor web
Așa cum s-a 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 două 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 utilizarea unui token binar prin intermediul BinarySecurityToken. Acesta este utilizat în situațiile în care se utilizează tehnici de criptare precum Kerberos sau X.509.
Diagrama de mai jos prezintă 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 cerere poate fi trimisă de la clientul serviciului web către serviciul Security Token. Acest serviciu poate fi un serviciu web intermediar, special conceput pentru a furniza nume de utilizator/parole sau certificate serviciului web SOAP propriu-zis.
- Jetonul de securitate este apoi transmis clientului serviciului Web.
- Clientul serviciului web apelează apoi serviciul web, dar de data aceasta asigurându-se că token-ul 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 prezintă formatul părții de autentificare care face parte din documentul WSDL. 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 mesajului care conține acreditările utilizatorului ar putea arăta ca cea de mai sus. Numele elementului wsse este un nume special de element 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 un exemplu de securitate a unui serviciu web SOAP. Vom construi o securitate a unui serviciu web pe baza exemplului demonstrat anterior în capitolul SOAP și vom adăuga un strat de securitate la acesta.
În exemplul nostru, vom crea un serviciu web simplu, care va fi utilizat pentru a returna un șir de caractere aplicației care apelează serviciul web. Dar de data aceasta, când serviciul web este invocat, trebuie furnizate acreditările serviciului apelant. Să urmăm pașii de mai jos pentru a crea serviciul nostru web SOAP și 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 a alege tipul 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 oricărei aplicații web.
- Dați un nume pentru proiectul dvs. care, în cazul nostru, a fost dat ca „serviciu web.asmx„.” Apoi, asigurați-vă că specificați o locație unde vor fi stocate fișierele proiectului.
După ce ați terminat, veți vedea fișierul de proiect creat în exploratorul de soluții din Visual Studio 2013.
Pas 3) În acest pas, vom adăuga un fișier de serviciu Web la proiectul nostru.
- Mai întâi, faceți clic dreapta pe fișierul proiectului, așa cum se arată mai jos.
- După ce faceți clic dreapta pe fișierul proiectului, aveți posibilitatea de a alege opțiunea „Adăugare->Serviciu Web (ASMX)” pentru a adăuga un fișier de serviciu web. Trebuie doar să furnizați numele Serviciului 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. Așadar, î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; } }
Code Explicaţie:
- Acum creăm o clasă separată numită AuthHeader care este de tip Clasa SoapHeaderOri de câte ori doriți să schimbați ce este transmis în antetul SOAP, trebuie să creați o clasă care utilizează clasa SoapHeader încorporată în .Net. Prin personalizarea antetului SOAP, avem acum posibilitatea de a transmite un „Nume de utilizator” și o „Parolă” atunci când este apelat serviciul web.
- 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.asmxAcest cod definește de fapt funcția serviciului nostru web. Această funcție returnează un șir de caractere „Acesta este un Guru99” serviciu web către client. Dar de data aceasta, șirul va fi returnat doar dacă aplicația client transmite acreditările către serviciul 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); } else return "This is a Guru99 Web service"; }
Code Explicaţie:
- 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 la apelarea serviciului web. Dacă numele de utilizator este egal cu „Guru99” și parola este egală cu „Guru99Password”, apoi mesajul „Aceasta este o Guru„99 Web service” este transmis clientului. În caz contrar, va fi trimisă o eroare clientului dacă sunt transmise un ID de utilizator și o parolă 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:
Rezultatul de mai sus este afișat atunci 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 considerațiile de securitate care trebuie luate în considerare atunci când se lucrează cu servicii web:
- Auditare și gestionare a jurnalelor – Folosește înregistrarea în jurnal a aplicațiilor pentru a înregistra toate cererile care ajung la serviciile web. Aceasta oferă un raport detaliat despre cine a invocat serviciul web și poate ajuta la analiza impactului în cazul în care apare vreo încălcare a securității.
- Fluxul apelurilor 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 token-uri de autentificare transmise între aceste servicii web. Toate apelurile dintre serviciile web trebuie monitorizate și înregistrate.
- Informații sensibile – Nu includeți informații sensibile în intrările din jurnal, cum ar fi parole, numere de card de credit sau orice alte informații confidențiale. Dacă există un eveniment care conține oricare dintre aceste informații, acesta trebuie eliminat înainte de înregistrare.
- Track Business Operații - Track operațiuni comerciale semnificative. De exemplu, instrumentați aplicația dvs. pentru a înregistra accesul la metode deosebit de sensibile și la logica de afaceri. Luați exemplul unui magazin onlineping aplicație. 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 să fie tracsolicitat de serviciul web.
- Autentificare corectă – Autentificarea este mecanismul prin care clienții își pot stabili identitatea cu serviciul web folosind un anumit set de acreditări care pot dovedi această identitate. Nu ar trebui niciodată stocate acreditările utilizatorului și, prin urmare, dacă se utilizează WS Security pentru a apela serviciul web, trebuie reținut că serviciul web nu ar trebui să stocheze acreditările trimise în antetul SOAP. Acestea ar trebui eliminate de serviciul web.














