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 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ฤƒ 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.

Ameninศ›ฤƒri de securitate ศ™i contramฤƒsuri

รŽntr-o comunicare HTTPS standard รฎntre client ศ™i server, au loc urmฤƒtorii paศ™i

  1. 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.
  2. Serverul se autentificฤƒ apoi cฤƒtre client prin trimiterea certificatului sฤƒu. Acest lucru asigurฤƒ cฤƒ clientul comunicฤƒ cu serverul potrivit.
  3. 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.

Ameninศ›ฤƒri de securitate ศ™i contramฤƒsuri

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

  1. Dacฤƒ mesajul din corpul SOAP a fost semnat cu orice cheie de securitate, acea cheie poate fi definitฤƒ รฎn elementul antet.
  2. 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

Standarde de securitate a serviciilor web

Mai jos sunt paศ™ii care au loc รฎn fluxul de lucru de mai sus

  1. 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.
  2. Jetonul de securitate este apoi transmis clientului serviciului Web.
  3. Clientul serviciului Web a apelat apoi serviciul web, dar, de data aceasta, asigurรขndu-se cฤƒ jetonul de securitate este รฎncorporat รฎn mesajul SOAP.
  4. 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.

Creaศ›i servicii web securizate

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ฤƒ,

  1. 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.
  2. 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.

Creaศ›i servicii web securizate

Odatฤƒ terminat, veศ›i vedea fiศ™ierul de proiect creat รฎn exploratorul de soluศ›ii รฎn Visual Studio 2013.

Creaศ›i servicii web securizate

Pas 3) รŽn aceastฤƒ etapฤƒ,

Vom adฤƒuga un fiศ™ier 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

Creaศ›i servicii web securizate

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

    Creaศ›i servicii web securizate

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.

Creaศ›i servicii web securizate

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.

Creaศ›i servicii web securizate

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

	}
}

Code Explicaลฃie:-

  1. 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.
  2. 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.

Creaศ›i servicii web securizate

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

Code Explicaลฃie:-

  1. 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.
  2. 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.
  3. รŽ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 โ€žGuruโ€ž99Passwordโ€, 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:

Creaศ›i servicii web securizate

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ฤƒ.

Creaศ›i servicii web securizate

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. 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. Sฤƒ luฤƒm 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.

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.

Rezumaศ›i aceastฤƒ postare cu: