Qual è la differenza tra JWT e Bearer Token?


105

Sto imparando qualcosa sull'autorizzazione come Basic, Digest, OAuth2.0, JWT e Bearer Token.

Adesso ho una domanda.

Sai che i JWT vengono utilizzati come Access_Token nello standard OAuth2.0. JWT appare in RFC 7519 e Bearer Token è in RFC 6750.

Ad esempio, il portatore:

Authorization: Bearer <token>

Ero solito inviare token al server tramite AJAX o aggiungere token alla stringa di query dell'URL. So che un token può essere inviato anche aggiungendolo a un'intestazione della richiesta. Ciò significa che il token deve essere aggiunto all'intestazione del portatore dell'autorizzazione?

Potresti dirmi la relazione tra JWT e Bearer Token? Molte grazie.

Risposte:


85

JWT è uno standard di codifica per token che contiene un payload di dati JSON che può essere firmato e crittografato.

JWT può essere usato per molte cose, tra queste sono i bearer tokens, cioè un'informazione che puoi presentare a un servizio che in virtù del fatto che tu lo abbia (tu sei il "portatore") ti garantisce l'accesso a qualcosa.

I token bearer possono essere inclusi in una richiesta HTTP in diversi modi, uno di questi (probabilmente il preferito) è l'intestazione di autorizzazione. Ma potresti anche metterlo in un parametro di richiesta, un cookie o il corpo della richiesta. Questo è principalmente tra te e il server a cui stai tentando di accedere.


Quindi come analizzare il token nell'intestazione di autorizzazione, c'è un Bearer, devo usare String.slice (), c'è qualche middleware per analizzarlo?
— laoqiren

Sto usando Node.js
— laoqiren

Usa il auth-headerpacchetto se vuoi un parser minimo
— Demurgos

1
O semplicemente usa String.slice () :)
— Paul Siersma

138

Risposta breve

I JWT sono un modo conveniente per codificare e verificare i reclami .

Un token Bearer è solo una stringa, potenzialmente arbitraria, utilizzata per l'autorizzazione.

Contesto (tempo della storia)

Qualche anno fa, prima della rivoluzione JWT, a <token>era solo una stringa senza significato intrinseco, ad esempio 2pWS6RQmdZpE0TQ93X. Quel token è stato quindi cercato in un database, che conteneva le attestazioni per quel token. Lo svantaggio di questo approccio è che l'accesso al database (o una cache) è richiesto ogni volta che viene utilizzato il token.

I JWT codificano e verificano (tramite firma) le proprie affermazioni . Ciò consente alle persone di emettere JWT di breve durata che sono apolidi (leggi: autonomo, non dipendere da nessun altro). Non hanno bisogno di premere il DB. Ciò riduce il carico del DB e semplifica l'architettura dell'applicazione perché solo il servizio che emette i JWT deve preoccuparsi di raggiungere il livello DB / persistenza (quello refresh_tokenche probabilmente hai incontrato).


Grazie, e per quanto riguarda il Mac in autorizzazione, il Mac e il portatore sono uguali?
— laoqiren


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.