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.
ร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;
}
}
Code Explicaลฃie:-
- 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.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);
}
eise
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 โ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:
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. 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.













