cunoașterea modului de a asigura API-uri REST este la fel de important ca să scrie API-uri în sine. Majoritatea API-urilor REST sunt bazate pe protocolul HTTP și orice utilizator care are conexiune la internet le poate accesa, la fel și utilizatorii răi. Este foarte important să scrieți API-uri sigure pentru a proteja afacerea.
înainte de a începe să securizați API-urile RESTful, să înțelegem care sunt toate opțiunile noastre ca Dezvoltatori? Ce va fi potrivit pentru utilizarea noastrăcaz?
Table of Contents1. Authentication vs. Authorization2. Four Ways to Secure RESTful Web Services- BASIC Authentication- DIGEST Authentication- Client CERT Authentication- OAUTH2 API Keys3. RESTful Web Services Security Implementations- Using SecurityContext- Using Annotations4. Best Practices
- diferența dintre autentificare vs. autorizare
- patru moduri de a asigura servicii web RESTful
- 2.1. Autentificarea de bază
- 2.2. DIGEST Authentication
- 2.3. Autentificarea cert client
- 2.4. Chei API OAuth2
- implementări de securitate REST API
- 3.1. Jax-RS SecurityContext instanță
- 3.2. Adnotări JAR-RS pentru autorizarea la nivel de metodă
- REST API securitate Cele mai bune practici
- a fost utilă această postare?
diferența dintre autentificare vs. autorizare
înainte de a sări în discuția principală, să ne lămurim faptele despre ceea ce este autentificarea și ce este autorizarea.
în engleză simplă, autentificarea este procesul de a constata că „utilizatorul este cu adevărat cineva care pretinde că este”. Din punct de vedere tehnic, este procesul de conectare la sistem prin nume de utilizator/parolă sau orice mecanisme similare, de exemplu, scanarea amprentelor digitale, token de securitate, întrebări de securitate sau token SAML primite de la SSO login. Trebuie să existe ceva care poate identifica utilizatorul de la alții.
odată ce utilizatorul se află în sistem, autorizarea se referă la reguli care determină „ce utilizator are voie să facă” și ce nu este, de exemplu, un utilizator normal poate posta un mesaj în orice grup public, dar utilizatorii numai cu rol de editor vor putea șterge ceva. Autorizarea este adesea văzută atât ca setarea introductivă a permisiunilor de către un administrator de sistem, cât și ca verificarea valorilor de permisiune care au fost deja configurate atunci când un utilizator primește acces la sistem.
când asigurăm servicii web RESTful, trebuie să avem grijă de ambii factori. Cele două concepte sunt complet ortogonale și independente, dar ambele sunt esențiale pentru proiectarea securității, iar eșecul de a obține unul corect crește șansele unui sistem compromis..
patru moduri de a asigura servicii web RESTful
există mai multe moduri de a asigura un API RESTful în Java. Să trecem prin 4 alegeri cele mai populare:
2.1. Autentificarea de bază
este cea mai simplă dintre toate tehnicile și probabil cea mai utilizată. Utilizați formulare de conectare / parolă – este doar autentificarea de bază. Introduceți numele de utilizator și parola și trimiteți formularul către server, iar aplicația vă identifică ca utilizator – vi se permite să utilizați sistemul – altfel primiți eroare.
principala problemă cu această implementare de securitate este că acreditările sunt propagate într-un mod simplu de la client la server. Acreditările sunt doar codificate cu Base64 în tranzit, dar nu sunt criptate sau hash în niciun fel. În acest fel, orice sniffer ar putea citi pachetele trimise prin rețea.
HTTPS este, prin urmare, de obicei preferat sau utilizat împreună cu Autentificarea de bază, ceea ce face ca conversația cu serverul web să fie complet criptată. Cea mai bună parte este că nimeni nu poate ghici chiar din exterior că Auth de bază are loc.
2.2. DIGEST Authentication
această metodă de autentificare folosește algoritmi de hashing pentru a cripta parola (numită parola hash) introdusă de utilizator înainte de a o trimite la server. Acest lucru, evident, îl face mult mai sigur decât metoda de autentificare de bază, în care parola utilizatorului călătorește în text simplu care poate fi citit cu ușurință de oricine o interceptează.
Citeste mai mult: genera parole criptate
există multe astfel de algoritmi de hashing în java, de asemenea,, care se poate dovedi foarte eficient pentru securitate parola, cum ar fi MD5, SHA, bcrypt, Scrypt și algoritmi PBKDF2WithHmacSHA1.
vă rugăm să rețineți că, odată ce acest hash parola este generat și stocate în baza de date, nu se poate converti înapoi la parola originală. De fiecare dată când utilizatorul se conectează la aplicație, trebuie să regenerați din nou hash-ul parolei și să se potrivească cu hash-ul stocat în baza de date. Deci, dacă utilizatorul și-a uitat parola, va trebui să-i trimiteți o parolă temporară și să-i cereți să o schimbe cu noua sa parolă. Ei bine, este o tendință comună acum-o-zi.
2.3. Autentificarea cert client
acesta este un mecanism în care se stabilește un acord de încredere între server și client prin certificate. Acestea trebuie să fie semnate de o agenție înființată pentru a se asigura că certificatul prezentat pentru autentificare este legitim, cunoscut sub numele de CA.
folosind această tehnică, atunci când clientul încearcă să acceseze o resursă protejată, în loc să furnizeze un nume de utilizator sau o parolă, acesta prezintă certificatul serverului. Certificatul conține informațiile utilizatorului pentru autentificare, inclusiv acreditările de securitate, pe lângă o pereche unică de chei private-publice. Serverul determină apoi dacă utilizatorul este legitim prin CA. În plus, trebuie să verifice dacă utilizatorul are acces la resursă. Acest mecanism trebuie să utilizeze HTTPS ca protocol de comunicare, deoarece nu avem un canal sigur pentru a împiedica pe cineva să fure identitatea clientului.
puteți găsi un tutorial complet pentru generarea certificatului de securitate în documentele oficiale oracle.
2.4. Chei API OAuth2
dacă ați dezvoltat vreodată aplicații care interacționează cu alte aplicații prin cloud, de exemplu integrarea facebook sau autentificarea twitter etc. apoi ați folosit deja acest lucru. Acestea necesită să furnizați cheia API și secretul API pentru a vă identifica în mod corect. Aceste cheie API și secrete sunt unele șir codificat aleatoriu, care este imposibil de ghicit.
pentru a înțelege cum funcționează, Să presupunem că utilizați un Flickr (aplicație de partajare a fotografiilor) și doriți să postați unele dintre fotografiile dvs. folosind API-ul REST. Creați cererea așa cum este documentată în documentele Flickr, apoi trimiteți-o.
apoi, la primirea Solicitării, Flickr autentifică utilizatorul citind informațiile din cheia API cu cheia secretă care aparține utilizatorului. Odată ce aceste validări au succes, serverul oferă răspunsul clientului. Astfel, obținem un răspuns cu toate fotografiile care au fost postate recent în Flickr.
după cum veți observa, în acest fel, puteți crea cu ușurință aplicații folosind API-ul furnizorului. De asemenea, furnizorul vă va permite să vă autentificați, să accesați informații publice.
dacă cineva începe să nu respecte acordurile, de exemplu, trimiterea de trafic nedorit sau orice încălcare a politicii, furnizorul retrage cheia API și împiedică utilizarea abuzivă a API-urilor sale.
implementări de securitate REST API
în afară de conceptele de mai sus, va trebui, de obicei, să vă asigurați API-urile RESTful în compania dvs. folosind metodele de mai jos.
3.1. Jax-RS SecurityContext instanță
interfața javax.ws.rs.core.SecurityContext
oferă acces la informații legate de securitate pentru o cerere și este foarte similar cu javax.servlet.http.HttpServletRequest
.
accesați SecurityContext prin injectarea unei instanțe într-un câmp de clasă, metoda setter, sau parametru metodă folosind javax.ws.rs.core.Context
adnotare de exemplu, în codul de mai jos sc.isUserInRole()
este folosit pentru a verifica autorizarea pentru utilizator.
3.2. Adnotări JAR-RS pentru autorizarea la nivel de metodă
această tehnică este utilizată pe scară largă în aplicația întreprinderii și utilizată pentru a verifica rolurile și responsabilitățile unui autentificat utilizat – pentru orice anumită operațiune. JAX-RS oferă adnotări de mai jos în acest scop.
- @Permisall
- @ DenyAll
- @ RolesAllowed
un exemplu de utilizare a adnotării poate fi:
Citeste mai mult : Jax-RS autentificare și autorizare exemplu
REST API securitate Cele mai bune practici
să notăm câteva puncte importante în timp ce proiectarea de securitate pentru serviciile web RESTful.
- utilizați numai protocolul HTTPS, astfel încât întreaga dvs. comunicare să fie întotdeauna criptată.
- nu trimiteți niciodată acreditări auth sau chei API ca param de interogare. Ele apar în URL și pot fi înregistrate sau urmărite cu ușurință.
- utilizați cel mai greu nivel de criptare întotdeauna. Aceasta va ajuta în a avea mai multă încredere.
- pentru resursele expuse de serviciile web RESTful, este important să vă asigurați că orice solicitare PUT, POST și DELETE este protejată de falsificarea solicitărilor Cross Site.
- validați întotdeauna datele de intrare cât mai curând posibil. Utilizați numai date primitive ca parametru de intrare cât mai mult posibil.
- se bazează pe cadru cu condiția caracteristici de validare, deoarece acestea sunt testate de comunitate mare deja.
Spuneți-mi gândurile și experiențele dvs. despre cum să vă asigurați serviciile web RESTful în organizația dvs.
Învățare Fericită !!