Tutorial de securitate Web Service (WS) cu exemplu SOAP

Cuprins:

Anonim

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, 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 la internet, există întotdeauna șansa unei amenințări de securitate pentru aplicațiile 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.

În acest tutorial, veți învăța-

  • Amenințări de securitate și contramăsuri
  • Standarde de securitate a serviciilor web
  • Cum să construiți servicii web sigure
  • Cele mai bune practici de securitate a serviciului web

Amenințări de securitate și contramăsuri

Pentru a înțelege amenințările la adresa securității 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ă din punct de vedere al securității.

Una dintre măsurile de securitate disponibile pentru HTTP este protocolul HTTPS. HTTPS este modalitatea sigură de comunicare între client și server pe web. HTTPS folosește stratul Secure Sockets sau SSL pentru o comunicare sigură. Atât clientul, cât și serverul vor avea un certificat digital pentru a se identifica drept autentic atunci când se întâmplă orice comunicare între client și server.

Într-o comunicare HTTPS standard între client și server, au loc pașii următori

  1. Clientul trimite o cerere către server prin certificatul clientului. Când serverul vede certificatul clientului, el face o notă în sistemul său cache, astfel încât să știe că răspunsul ar trebui să revină doar la acest client.
  2. Serverul se autentifică apoi clientului prin trimiterea certificatului său. Acest lucru asigură faptul că clientul comunică cu serverul potrivit.
  3. Toate comunicările ulterioare dintre client și server sunt criptate. Acest lucru asigură că, dacă orice alt utilizator încearcă să rupă securitatea și să obțină datele necesare, nu ar putea să le citească, 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 dat mai jos arată un client care vorbește atât cu o bază de date, cât și cu un server web la un moment dat. În astfel de cazuri, nu toate informațiile pot trece prin protocolul https.

Aici intervine SOAP în acțiune pentru a depăși astfel de obstacole, având la dispoziție specificația 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

  1. Dacă mesajul din corpul SOAP a fost semnat cu orice cheie de securitate, cheia respectivă poate fi definită în elementul antet.
  2. Dacă vreun 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.

În medii cu mai multe servere, tehnica de mai sus a autentificării 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 către serverul bazei de date într-o cerere HTTP, acesta nu poate fi decriptat deoarece baza de date nu are mecanisme potrivite pentru a face acest lucru.
  • Numai atunci când solicitarea ajunge efectiv la serverul Web ca protocol SOAP, va putea descifra mesajul și va trimite răspunsul corespunzător înapoi clientului.

Vom vedea în subiectele următoare despre modul în care standardul de securitate WS poate fi utilizat pentru SOAP.

Standarde de securitate a serviciilor web

După cum sa discutat în secțiunea anterioară, standardul WS-Security se învârte în jurul definirii securității incluse în antetul SOAP.

Acreditările din antetul SOAP sunt gestionate în 2 moduri.

În primul rând, definește un element special numit UsernameToken. Aceasta este utilizată pentru a transmite numele de utilizator și parola serviciului web.

Cealaltă modalitate este de a utiliza un Token Binar prin BinarySecurityToken. Aceasta este utilizată în situații în care se utilizează 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

  1. O cerere poate fi trimisă de la clientul serviciului Web către Serviciul de jeton de securitate. Acest serviciu poate fi un serviciu web intermediar care este conceput special pentru a furniza nume de utilizator / parole sau certificate serviciului web SOAP propriu-zis.
  2. Jetonul de securitate este apoi transmis clientului de servicii Web.
  3. Clientul serviciului Web a apelat apoi serviciul web, dar, de data aceasta, asigurându-se că simbolul de securitate este încorporat în mesajul SOAP.
  4. Serviciul Web înțelege apoi mesajul SOAP cu jetonul de autentificare și poate contacta apoi serviciul Jeton de securitate pentru a vedea dacă jetonul de securitate este sau nu autentic.

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 parola.

Când mesajul SOAP este transmis de fapt î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 denumit definit pentru SOAP și înseamnă că conține informații bazate pe securitate.

Cum să construiți servicii web sigure

Să vedem acum exemplul de securitate al serviciului web SOAP. Vom construi o securitate a serviciului web pe exemplul 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 utilizat pentru a returna un șir către aplicația care apelează serviciul web. Dar de data aceasta, când este apelat serviciul web, acreditările trebuie furnizate serviciului de apelare. Să urmăm pașii de mai jos pentru a crea serviciul nostru web SOAP și pentru a adăuga definiția de securitate la acesta.

Pasul 1) Primul pas este crearea unei aplicații web Asp.Net goale. Din Visual Studio 2013, faceți clic pe opțiunea de meniu Fișier-> Proiect nou.

După 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

Pasul 2) În acest pas,

  1. Asigurați-vă că alegeți mai întâi șablonul web C # 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.
  2. Dați un nume proiectului dvs. care, în cazul nostru, a fost dat ca „ webservice.asmx. ” Apoi asigurați-vă că daț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 soluția dvs. de explorare în Visual Studio 2013.

Pasul 3) În acest pas,

Vom adăuga un fișier de serviciu Web la proiectul nostru

  1. Mai întâi faceți clic dreapta pe fișierul de proiect așa cum se arată mai jos
  1. După ce faceți clic dreapta pe fișierul proiectului, aveți șansa de a alege opțiunea „Adăugare-> Serviciu Web (ASMX) pentru a adăuga un fișier de serviciu web. Furnizați doar un nume de Serviciu tutorial pentru fișierul cu numele serviciului web.

Pasul de mai sus va solicita o casetă de dialog, în care se poate introduce numele fișierului de servicii web. Deci, în caseta de dialog de mai jos, introduceți numele TutorialService ca nume de fișier.

Pasul 4) Adăugați următorul cod în fișierul dvs. asmx Service Tutorial. Fragmentul de cod de mai jos este folosit pentru a adăuga o clasă personalizată care va fi utilizată pentru a schimba antetul SOAP atunci când este generat mesajul SOAP. 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;}}

Cod Explicație: -

  1. Acum creăm o clasă separată numită AuthHeader, care este de tipul clasei SoapHeader . Ori de câte ori doriți să schimbați ceea ce este trecut în antetul SOAP, trebuie să creați o clasă care utilizează clasa încorporată SoapHeader din .Net. Personalizând SOAPheader, avem acum posibilitatea de a trece un „Nume de utilizator” și „Parolă” atunci când este apelat serviciul web.
  2. Apoi definim variabilele „UserName” și „Password” care sunt de tip șir. Acestea vor fi utilizate pentru a păstra valorile numelui de utilizator și parolei care sunt transmise serviciului web.

Pasul 5) Ca pas următor, următorul cod trebuie adăugat la același 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 data aceasta, șirul va fi returnat numai dacă aplicația client trece 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);}eisereturn "This is a Guru99 Web service";}

Cod Explicație: -

  1. Aici, creăm un obiect al clasei AuthHeader care a fost creat în pasul anterior. Acest obiect va fi transmis serviciului nostru Guru99Web, în care numele de utilizator și parola pot fi examinate îndeaproape.
  2. Atributul [SoapHeader] este utilizat acum pentru a specifica faptul că atunci când este apelat serviciul Web, trebuie să i se transmită numele de utilizator și parola.
  3. În acest bloc de cod, examinăm de fapt numele de utilizator și parola transmise atunci când este apelat serviciul web. 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 în cazul în care sunt trecute o identitate de utilizator și o parolă greșite.

Dacă codul este executat cu succes, următoarea ieșire va fi afișată când rulați codul în browser.

Ieșire:

Ieșirea 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 linkul Descriere serviciu.

Din descrierea serviciului, veți putea vedea acum că numele de utilizator și parola sunt elemente ale fișierului WSDL. Acești parametri trebuie să fie trimiși atunci când este invocat serviciul web.

Cele mai bune practici de securitate a serviciului web

Următoarele sunt considerațiile de securitate care ar trebui menționate atunci când lucrați cu servicii web

  1. Audit și gestionare jurnal - Utilizați jurnalul aplicației pentru a înregistra toate cererile care vin 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 o încălcare a securității.

  2. Fluxul de apeluri către serviciul web - Încercați să notați fluxul de apeluri din 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 înregistrările din jurnal, cum ar fi parolele sau numerele cardului de credit sau orice fel de alte informații confidențiale. Dacă există un eveniment care conține oricare dintre aceste informații, trebuie să fie aruncate înainte de înregistrare.

  4. Urmăriți operațiunile comerciale - Urmăriți operațiunile comerciale semnificative. De exemplu, instrumentați-vă aplicația pentru a înregistra accesul la metode deosebit de sensibile și logică 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 cumpărate, articolele încărcate în coș și apoi achiziția finală. Întregul flux de lucru al afacerii trebuie urmărit de serviciul web.

  5. 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 identitatea respectivă. Nu trebuie să stocați niciodată acreditările utilizatorului și, prin urmare, dacă WS Security este utilizat pentru a apela serviciul web, trebuie remarcat faptul că serviciul web nu ar trebui să stocheze acreditările trimise în antetul SOAP. Acestea ar trebui eliminate de către serviciul web.

rezumat

  • SOAP oferă un strat suplimentar numit WS Security pentru a oferi securitate suplimentară atunci când sunt efectuate apeluri către servicii Web.
  • Securitatea WS poate fi apelată cu un simplu nume de utilizator sau parolă sau poate fi utilizată cu certificate binare pentru autentificare
  • Am văzut că în .Net putem personaliza serviciul Web pentru a primi un nume de utilizator și o parolă ca parte a elementului antet SOAP.