La fel ca multe alte tehnologii Microsoft, prima punere în aplicare a Web-servicii - așa-numitele ASMX servicii web - arată calea unei decizii foarte fructuoase, dar nu conținea aspectele cheie ale funcționalității necesare pentru a crea o soluții cu adevărat sigure și fiabile. Servicii Web Extensii 3.0 - o noua versiune, care vă permite să facă față cu multe dezavantaje ASMX servicii web. Una dintre noile caracteristici cheie - abilitatea de a crea soluții la cheie care acceptă autentificarea la servicii web. O să-ți spun cum se face.
Este instructiv de a compara ceea ce este acum disponibil Microsoft, astfel încât a fost la momentul eliberării inițiale a VS.NET. Sigur, folosind Visual Studio.NET de la început, a fost ușor de a crea servicii web. Luați în considerare, de exemplu, procesul de creare a ASMX Web-service. Mai întâi, creați un proiect care va conține Web-service. Apoi, utilizați WebMethod și WebService atributele, pentru a arăta clasele și metodele pe care doriți să le invoce la distanță.
Mod de lucru Web-servicii este destul de simplu. Ei trimit SOAP-mesaj încapsulat în http-pachet corp. Răspunsul returnat de server, - HTTP-SOAP-pachet cu mesajul.
Crearea unui web-serviciu - o sarcină ușoară, și de securitate - nr. Și, cel mai probabil, va trebui să asigure accesul la orice serviciu web și pentru a pune în aplicare diferite niveluri de autentificare. Aici ASMX servicii web sunt lipsiți de putere.
Microsoft a făcut modificări pentru a simplifica procesul de depanare, cum ar fi utilizarea GET sau POST, și protocolul HTTP specifice pentru a avea acces la servicii web. Acesta funcționează bine, dar acum dezvoltatorii sunt unele aspecte critice care trebuie abordate.
În primul rând, Web-servicii nu ar trebui să depindă de protocolul de transport. Trebuie doar să treci SOAP-un mesaj, indiferent de protocol, și pentru a permite protocolul de strat de transport pentru a face față cu detaliile, dacă HTTP, TCP, UDP, MSMQ, sau chiar SMTP.
Vechi împotriva noii abordări
Acesta poate fi util pentru a vedea modul în care dezvoltatorii au lucrat cu securitatea în servicii web înainte să acorde o atenție la ea, așa cum se face acum. Pentru a proteja ASMX Web-service, puteți implementa o soluție personalizată pentru criptarea datelor, utilizați orice stare de serviciu pentru a stoca informații despre utilizatorii între cereri, sau să profite de nivelul de securitate al transporturilor, de exemplu, HTTPS.
O parte din această soluție poate necesita criptarea parametrilor de conținut transmis sau obține serverul SSL certificat. Puteți pune în aplicare un sistem de autentificare personalizat, care trece cheia hash ca primul parametru pentru fiecare apel de metodă. Tu generați cheia hash în metoda de login-ul și salvați-l în baza de date. În cazul în care cheia este în baza de date, iar utilizatorul are dreptul de a aplica metoda, interogarea este executată cu succes. Asta e ceea ce am făcut în primul proiect al web-service, efectuate de către echipa noastră. Apoi, cineva a spus că nu trebuie să confundăm starea sesiunilor IIS cu servicii web, și să-l credem. Nu era adevărat, dar noi încă și-au păstrat propriile decizii. După cum îmi amintesc, am petrecut aproximativ o săptămână cu privire la punerea în aplicare și depanare a acestei decizii, pentru că am vrut să lucreze într-o fermă Web. Este suficient să spunem că construirea propria soluție este, de asemenea, cantități semnificative de cheltuieli de timp de audit de cod, testarea și verificarea siguranței acestei decizii.
Microsoft încearcă în mod activ pentru a rezolva aceste probleme, începând cu prima versiune a ASMX servicii web. De exemplu, deciziile privind autentificarea online serviciile incluse în serviciul ameliorărilor Web (WSE) 1.0. WSE - acest add-on la Visual Studio .NET; pe web-site-ul Microsoft pentru cea mai recentă versiune, WSE 3.0. Una dintre cele mai interesante caracteristici WSE 3.0 - ușor de utilizat, cadru extensibil, care oferă securitate și autentificare.
Pentru a crea un cadru pe care Microsoft a colectat informații cu privire la metodele cele mai frecvent utilizate pentru securitate servicii web. Am folosit, de asemenea, mesajele utilizatorilor pe diverse forumuri și grupuri de știri, care descrie script-uri utilizate frecvent. Aceste scenarii reprezintă cel mai frecvent utilizate, modalități de bază pentru punerea în aplicare de securitate și de autentificare servicii web în acest moment. Acesta este motivul pentru care sunt numite Scenarii la cheie de securitate - scenarii de siguranță „la cheie“.
Documentație WSE 3.0 solicită aceste script-uri la cheie «Security Aserțiune», dar termenul „scenariul“ este mult mai răspândită în comunitatea de dezvoltatori servicii Web, așa că va folosi. Script-ul finit este bine ca acestea pot fi folosite declarativ, care permite administratorului de sistem să le schimbe în timpul serviciului. Modelul declarativă permite, de asemenea, programul pentru a extinde script-urile existente, sau chiar creați propriile scripturi. Un alt avantaj: topologia rețelei se poate schimba - serverul poate trece la un alt furnizor - dar nu este nevoie să re-implementa servicii.
Utilizat în proiect scenarii gata sunt enumerate într-un fișier de politică specială. Fișierul de politică, puteți crea o politică pe nume, și să specifice cerințele de securitate declarativ. Atunci când se utilizează un script personalizat de politică fișier sau gata de politică trebuie să indice clasa politica de extindere. WSE creează o instanță a acestei clase se bazează pe setările specificate în fișierul de politici. Codul eșantionului în documentația WSE utilizează extensii pentru a încărca clasa la dosar politică ar putea fi prelucrate în mod corespunzător.
Începem cu maestrul (expertul)
Să începem cu expertul de utilizare WSE pentru a permite utilizarea politicii Web-servicii. După instalarea WSE 3.0, faceți clic dreapta pe Proprietăți în cadrul proiectului web-service și selectați „Settings WSE 3.0“ din meniul contextual. Pe prima filă, aveți nevoie pentru a marca „Activați acest proiect pentru serviciul web Îmbunătățiri“ și „Enable Microsoft Web Services Îmbunătățiri Săpun protocol Factory“. În fila Politică, bifați „Enable Policy“, și va afișa numele de fișier de politică pe care doriți să îl utilizați. Acest fișier este creat în același folder ca și fișierul web.config. Faceți clic pe Adăugare, pentru a adăuga o nouă politică de aplicare, și specificați un nume prietenos, cel puțin MyPolicy. Acest lucru se va deschide Expertul Setări WSE Securitate. Faceți clic pe Next. Acest lucru se va deschide pagina Setări de autentificare, care conține cele mai interesante opțiuni (a se vedea. Figura 1).
Asigurați-vă că alegeți „Secure un serviciu de aplicare“. Rețineți că lucrează la proiectul Web-serviciu, nu clientul care accesează web-service. Pentru a crea un fișier de politică pentru partea de client, trebuie să executați din nou expertul și selectați „Secure o aplicație client“.
Partea de jos a expertului oferă o gamă de patru metode de autentificare a clientului: anonime (), dupa anonimi nume de utilizator (username), certificatul de autentificare și Windows. Faceți clic pe Următorul și se lasă toate celelalte opțiuni neschimbate. Fiecare metodă de autentificare este pusă în aplicare cu utilizarea de script-ul finit WSE 3.0. Să ne gândim ce fiecare dintre opțiuni.
Metoda de autentificare anonimă este implementată clasa AnonymousForCertificateAssertion. Această metodă este folosită pentru clienți anonimi. De exemplu, acesta poate fi utilizat, în cazul în care nu contează exact cine acceseaza serverul. Clienții nu sunt autentificate, astfel încât să vă interesează doar ceea ce conexiunea este sigură și nu pot fi monitorizate sau modificate. Securitate Communication ofera certificat de server X.509. Este singurul certificat pe care trebuie să instalați pe server pentru a asigura securitatea comunicațiilor în acest scenariu. Certificatul vă permite să cripta și semna SOAP-un mesaj în întregime sau în părți separate, de exemplu, numai corpul și antetul mesajului. element
Din nou, serverul furnizează certificatul X.509, menționat în
Utilizarea Windows-autentificare
Windows autentificare - ultima opțiune pe pagina expertul. Această opțiune utilizează un separate pentru detalii de autentificare de server Kerberos la care clientul și serverul pot accesa pentru a verifica detaliile. Serverul publică detalii privind biletele de serviciu (bilete de serviciu) Kerberos, încapsulată într-o SOAP-mesaje. Partea care primește poate solicita un Kerberos server de valabilitate a biletului rezultat. Puteți configura Kerberos-server, astfel încât acestea să permită delegației, ceea ce le face utile în punerea în aplicare a sistemului de securitate a companiei sau „o singură semnătură» (single sign on, SSO). Expertul WSE nu vă permite să configurați setările pentru biletul Kerberos, dar se poate face manual, într-un fișier de politică. Element Kerberos este prezentat în Listarea 3.
WSE 3.0 conține un alt script gata, dar nu este în expertul. El a realizat clasa UsernameOverTransportAssertion și vă permite autentificarea clienților prin intermediul textului pentru numele de utilizator și o parolă, criptare mesaj și protecție la nivelul de transport. Cu toate acestea, WSE nu verifică dacă securitatea este asigurată la nivel de transport, astfel încât de îngrijire trebuie să fie luate atunci când se utilizează acest script. Nu doriți parolele ușor pentru a intercepta transmisia. Utilizați un script UsernameOverTransport simplu:
Din păcate, acest scenariu simplu se bazează în primul rând în protejarea mesajelor din stratul de transport, care nu protejează o parte a SOAP-mesajele - trebuie să fie criptat și decriptat în întregime.
Am menționat deja că prefer să setați numele de utilizator și parolele programatică. Puteți face acest lucru în fișierul de politică, dar acest lucru nu este recomandată atunci când se utilizează scenariul UsernameOverTransport, pentru că parola este nicăieri pentru a fi stocate în text simplu.
După crearea unei politici pentru serviciul de a face același lucru pentru client. Prezența ambelor politici vă permite să le aplice în clasă PolicyAttribute Web-serviciu, precum și în serviciu web clasă proxy:
Puteți apela, de asemenea, metoda proxy.SetPolicy ( „MyPolicyUsername“) pentru web-servicii de înaltă clasă proxy. Specificarea unui nume de utilizator și parola pentru proxy client este descrisă în documentația WSE: