Am un nou SPA cu un apatrid autentificare model folosind JWT. Sunt întrebat de multe ori pentru a se referi OAuth pentru autentificare curge ca ceri sa trimit 'Purtător de jetoane' pentru fiecare cererile în loc de un simplu semn header-ul, dar cred că OAuth este mult mai complex decât un simplu JWT pe bază de autentificare. Care sunt principalele diferențe, ar trebui să fac JWT de autentificare se comporte ca OAuth?
Sunt, de asemenea, folosind JWT ca XSRF-TOKEN pentru a preveni XSRF dar am fost rugat să păstrați-le separat? Ar trebui să păstrați-le separat? Orice ajutor va fi apreciat și ar putea duce la un set de linii directoare pentru comunitate.
TL;DR Dacă aveți foarte simple scenarii, cum ar fi o singură aplicație client, un singur API atunci s-ar putea să nu plătească pentru a merge OAuth 2.0, pe de altă parte, o mulțime de diferite de clienti (bazate pe browser-ul mobil, originar, server-side, etc.), apoi lipirea OAuth 2.0 reguli s-ar putea face mai ușor de gestionat decât încercarea de rulare propriul sistem.
După cum se menționează într-un alt răspuns, JWT (Afla JSON Web Token-uri) este doar un semn format, se definește un compact și de sine stătător în mecanismul de transmitere a datelor între părți într-un mod care pot fi verificate și de încredere, pentru că este semnat digital. În plus, codificarea normelor de JWT, de asemenea, aceste token-uri foarte ușor de utilizat în contextul HTTP.
Fiind de sine stătătoare (real simbol conține informații despre un anumit subiect) sunt, de asemenea, o alegere bună pentru punerea în aplicare a apatrid mecanisme de autentificare (aka Uite mama, nu sesiunile de!). Atunci când merge acest traseu și singurul lucru pe care un partid trebuie să prezinte pentru a beneficia de accesul la o resursă protejată este token-ul în sine, token-ul în cauză poate fi numit un purtător de semn.
În practică, ceea ce're face deja pot fi clasificate în funcție de purtător de jetoane. Cu toate acestea, nu ia în considerare că te're nu folosesc purtător de jetoane după cum se specifică de către OAuth 2.0 legate de specificatii (vezi RFC 6750). Asta ar însemna, bazându-se pe "Autorizație" HTTP antet și folosind "la Purtător" schemă de autentificare.
În ceea ce privește utilizarea JWT pentru a preveni CSRF, fără să știe exact detaliile it's dificil să se stabilească validitatea practică, dar să fiu sincer, nu par a fi corecte și/sau util. Următorul articol (Cookie-uri vs Jetoane: The Definitive Guide) poate fi un instrument util citit pe acest subiect, în special XSS și XSRF Protecție secțiune.
Un ultim sfat, chiar dacă tu nu't nevoie pentru a merge cu OAuth 2.0, I ar recomanda cu tărie pe trecerea de token-ul de acces în "Autorizație" antet în loc de a merge cu antetele personalizate. Dacă acestea sunt într-adevăr purtător de jetoane urmați regulile de RFC 6750, dacă nu, puteți crea întotdeauna un obicei schemă de autentificare și de a folosi în continuare că antet.
Autorizație de cap sunt recunoscute și tratate în mod special prin HTTP proxy-uri și servere. Astfel, utilizarea unor astfel de antete pentru trimiterea de token-uri de acces la serverele de resurse reduce riscul de scurgeri sau neintenționate de stocare de autentificată de cereri, în general, și în special de Autorizare antete.
(sursa: RFC 6819, secțiunea 5.4.1)
OAuth 2.0 definește un protocol, adică specifică modul în jetoane sunt transferate, JWT definește un semn format.
OAuth 2.0 și "JWT autentificare" au aspect similar atunci când este vorba de (2) etapa în care Clientul prezintă semn de Resurse Server: token-ul este trecut într-un antet.
Dar "JWT autentificare" nu este un standard și nu precizează cum Clientul obține token, în primul rând (etapa 1). Care este în cazul în care complexitatea percepută de OAuth vine de la: - l definește, de asemenea, diferite moduri în care Clientul poate obține un token de acces de la ceva care este numit un Server de Autorizare.
Deci, adevărata diferență este că JWT este doar un semn format, OAuth 2.0 este un protocol (ca poate utilizați un JWT ca un semn format).
În primul rând, trebuie să se diferențieze JWT și OAuth. Practic, JWT este un semn format. OAuth este un authorization protocol, care pot folosi JWT ca un semn. OAuth folosește pe partea de server și client-side de stocare. Dacă doriți pentru a face logout trebuie sa te duci cu OAuth2. Autentificare cu JWT token poate nu deconectare de fapt. Pentru că tu nu't au un Server de Autentificare care ține evidența de jetoane. Dacă doriți pentru a oferi un API pentru a 3-a parte clienții, trebuie să utilizați OAuth2, de asemenea,. OAuth2 este foarte flexibil. JWT punerea în aplicare este foarte simplu și nu ia mult timp pentru a pune în aplicare. Dacă cererea dumneavoastră are nevoie de acest tip de flexibilitate, ar trebui să te duci cu OAuth2. Dar dacă nu't nevoie de acest utiliza caz, de punere în aplicare OAuth2 este o pierdere de timp.
XSRF token este întotdeauna trimis la client în fiecare antet de răspuns. Nu contează dacă un CSRF token-ul este trimis într-o JWT semn sau nu, pentru că CSRF token-ul este securizat cu sine. Prin urmare, trimiterea CSRF token în JWT este inutilă.
JWT (JSON Web Token-uri)- este doar un semn format. JWT jetoanele sunt JSON codificate structuri de date conține informații despre emitentul, subiectul (creanțe), timp de expirare etc. Este semnat pentru inviolabile și autenticitatea și pot fi criptate pentru a proteja semn de informații folosind simetrice sau asimetrice abordare. JWT este mai simplu decât SAML 1.1/2.0 și susținută de toate dispozitivele și este mult mai puternic decât SWT(Simplu Web Token).
OAuth2 - OAuth2 rezolva o problemă pe care utilizatorul dorește să acceseze datele folosind software-ul client ca parcurge bazate pe aplicații web, aplicații mobile native sau aplicații desktop. OAuth2 este doar pentru autorizare, software-ul client poate fi autorizat pentru a accesa resursele de pe-numele de utilizator final folosind token de acces.
OpenID Connect - OpenID Conecta construiește pe partea de sus a OAuth2 și se adaugă autentificare. OpenID Conecta adăuga unele constrângere la OAuth2 ca UserInfo Final, Semn de IDENTIFICARE, de descoperire și de înregistrare dinamic de OpenID Conecta furnizorii de servicii și de gestionare a sesiune. JWT este obligatorie format pentru token.
Protecție CSRF - nu't nevoie de a pune în aplicare CSRF protecție dacă nu magazin token-ul în browser-ul's cookie.
Puteți citi mai multe detalii aici http://proficientblog.com/microservices-security/
Se pare ca toti care au raspuns aici ratat punct de discuție de OAUTH
De La Wikipedia
OAuth este un standard deschis pentru acces delegație, frecvent utilizat ca o modalitate pentru ca utilizatorii de Internet să acorde site-uri web sau aplicații de acces la informațiile lor pe alte site-uri, dar fără să le dea parolele.[1] Acest mecanism este folosit de companii precum Google, Facebook, Microsoft și Twitter pentru a permite utilizatorilor să împărtășească informații despre conturile lor cu aplicații de la terți sau site-uri web.
Punctul cheie aici este accesul delegație`. De ce ar crea cineva OAUTH atunci când există un id/parolă de autentificare bazat, susținută de multifactored auth ca OTPs și în continuare poate fi asigurată prin JWTs care sunt folosite pentru a asigura accesul la căi (ca domenii în OAUTH) și setați expirarea termenului de acces
Nu's nici un punct de folosind OAUTH dacă consumatorilor acces la resursele lor(punctele finale) numai prin intermediul site-uri de încredere(sau aplicații), care sunt din nou găzduit pe site-end puncte
Puteți merge autentificarea OAUTH doar dacă sunteți un furnizor OAUTH în cazurile în care proprietarii de resurse (utilizatorii) de acces(ta) resurse (end-points) prin intermediul unui terț client(aplicație externă). Și exact acesta este creat pentru același scop, deși puteți abuzeze de ea in general
O altă notă importantă:
Te're liber folosind cuvântul "autentificare" pentru JWT și OAUTH, dar nici furniza mecanism de autentificare. Da este un semn mecanism, iar celălalt este protocol, dar odată autentificat, ele sunt folosite doar pentru autorizare (management de acces). Te'am să înapoi OAUTH fie cu OPENID tip de autentificare sau propriul tau client acreditările
JWT este un standard deschis care definește un compact și de sine stătător modul de siguranță, transmiterea de informații între părți. Acesta este un protocol de autentificare în cazul în care ne-am permite codificate creanțe (token-uri) pentru a fi transferate între două părți (client și server) și token-ul este emis la identificarea unui client. Cu fiecare cerere ulterioară vom trimite token.
Întrucât OAuth2 este un cadru de autorizare, în cazul în care acesta are, în general, procedurile și setări definite de cadru. JWT poate fi folosit ca un mecanism în interiorul OAuth2.
Puteți citi mai multe despre asta aici
https://stackoverflow.com/questions/32964774/oauth-or-jwt-which-one-to-use-and-why/48333725#48333725
găsi diferențele principale între JWT & OAuth
OAuth 2.0 definește un protocol & JWT definește un semn format.
OAuth poate folosi fie JWT ca un semn format sau token de acces, care este un purtător de semn.
OpenID conecta cu cea mai mare utilizare JWT ca un semn format.
Jwt este un set strict de instrucțiuni privind emiterea și validarea a semnat token-uri de acces. Jetoanele conțin afirmații care sunt utilizate de către o aplicație pentru a limita accesul utilizatorului
OAuth2 pe de altă parte nu este un protocol, un delegat cadru de autorizare. cred că foarte detaliate de orientare, pentru că utilizatorii și aplicațiile autoriza anumite permisiuni pentru alte aplicații într-atât private cât și publice setări. OpenID Connect, care sta pe partea de sus de OAUTH2 vă oferă Autentificare și Autorizare.acesta detaliază cât mai multe roluri diferite, utilizatorii în sistemul dvs., partea de server de aplicații, cum ar fi un API, și clienți, cum ar fi site-uri web sau aplicații mobile native, se pot autentifica cu fiecare alte
Notă oauth2 poate lucra cu jwt , flexibil în aplicare, extandable pentru diferite aplicații