TL; DR
Se hai scenari molto semplici, come una singola applicazione client, una singola API, allora potrebbe non pagare per diventare OAuth 2.0, d'altra parte, molti client diversi (basato su browser, mobile nativo, lato server , ecc.) quindi attenersi alle regole di OAuth 2.0 potrebbe renderlo più gestibile rispetto al tentativo di implementare il proprio sistema.
Come affermato in un'altra risposta, JWT ( Learn JSON Web Tokens ) è solo un formato token, definisce un meccanismo compatto e autonomo per la trasmissione di dati tra le parti in un modo che può essere verificato e attendibile perché è firmato digitalmente. Inoltre, le regole di codifica di un JWT rendono anche questi token molto facili da usare nel contesto di HTTP.
Essendo autonomi (il token effettivo contiene informazioni su un determinato argomento) sono anche una buona scelta per implementare meccanismi di autenticazione senza stato (alias Look mum, no sessioni! ). Quando si percorre questa strada e l'unica cosa che una parte deve presentare per ottenere l'accesso a una risorsa protetta è il token stesso, il token in questione può essere chiamato token al portatore.
In pratica, ciò che stai facendo può già essere classificato come basato su token al portatore. Tuttavia, considera che non stai usando token al portatore come specificato dalle specifiche relative a OAuth 2.0 (vedi RFC 6750 ). Ciò implicherebbe, basandosi sull'intestazione Authorization
HTTP e utilizzando lo Bearer
schema di autenticazione.
Per quanto riguarda l'uso del JWT per prevenire la CSRF senza conoscere i dettagli esatti, è difficile accertare la validità di tale pratica, ma a dire il vero non sembra corretto e / o utile. Il seguente articolo ( Cookie vs token: Guida definitiva ) può essere una lettura utile su questo argomento, in particolare la sezione Protezione XSS e XSRF .
Un ultimo consiglio, anche se non hai bisogno di completare OAuth 2.0, ti consiglio vivamente di passare il tuo token di accesso all'interno Authorization
dell'intestazione invece di utilizzare le intestazioni personalizzate . Se sono veramente token al portatore segui le regole di RFC 6750, in caso contrario, puoi sempre creare uno schema di autenticazione personalizzato e utilizzare comunque quell'intestazione.
Le intestazioni di autorizzazione sono riconosciute e trattate in modo speciale da proxy e server HTTP. Pertanto, l'utilizzo di tali intestazioni per l'invio di token di accesso ai server di risorse riduce la probabilità di perdite o archiviazione involontaria di richieste autenticate in generale, e in particolare delle intestazioni di autorizzazione.
(fonte: RFC 6819, sezione 5.4.1 )