Qual é a diferença entre JWTs e Bearer Token?

105

Estou aprendendo algo sobre autorização, como Basic, Digest, OAuth2.0, JWTs e Bearer Token.

Agora eu tenho uma pergunta.

Você sabe que os JWTs estão sendo usados ​​como um Access_Token no padrão OAuth2.0. Os JWTs aparecem no RFC 7519 e o Bearer Token está no RFC 6750.

Por exemplo, o portador:

Authorization: Bearer <token>

Eu costumava enviar token para o servidor por AJAX ou adicionar token à string de consulta do url. Eu sei que um token também pode ser enviado adicionando-o a um cabeçalho de solicitação. Isso significa que o token deve ser adicionado ao cabeçalho Authorization Bearer?

Você poderia me dizer a relação entre JWTs e Bearer Token? Muito obrigado.

Laoqiren
fonte

Respostas:

85

JWT é um padrão de codificação para tokens que contém uma carga útil de dados JSON que pode ser assinada e criptografada.

O JWT pode ser usado para muitas coisas, entre elas estão os tokens de portador, ou seja, um pedaço de informação que você pode apresentar a algum serviço que, pelo fato de você ter (você sendo o "portador"), concede acesso a algo.

Os tokens do portador podem ser incluídos em uma solicitação HTTP de diferentes maneiras, uma delas (provavelmente a preferida) sendo o cabeçalho de autorização. Mas você também pode colocá-lo em um parâmetro de solicitação, um cookie ou no corpo da solicitação. Isso ocorre principalmente entre você e o servidor que está tentando acessar.

Thilo
fonte
Então, como analisar o token no cabeçalho de autorização, existe um Bearer, tenho que usar String.slice (), existe algum middleware para analisá-lo?
Laoqiren 02 de
Estou usando Node.js
laoqiren
Use o auth-headerpacote se quiser um analisador mínimo
Demurgos
1
Ou apenas use String.slice () :)
Paul Siersma
138

Resposta curta

Os JWTs são uma maneira conveniente de codificar e verificar reivindicações .

Um token do portador é apenas uma string, potencialmente arbitrária, que é usada para autorização.

Contexto (tempo da história)

Alguns anos atrás, antes da revolução JWT, a <token>era apenas uma string sem significado intrínseco, por exemplo, 2pWS6RQmdZpE0TQ93X. Esse token foi então pesquisado em um banco de dados, que continha as declarações desse token. A desvantagem dessa abordagem é que o acesso ao banco de dados (ou um cache) é necessário sempre que o token é usado.

Os JWTs codificam e verificam (por meio de assinatura) suas próprias declarações . Isso permite que as pessoas emitam JWTs de curta duração sem estado (leia-se: autocontido, não dependa de ninguém). Eles não precisam acertar o DB. Isso reduz a carga do banco de dados e simplifica a arquitetura do aplicativo porque apenas o serviço que emite os JWTs precisa se preocupar em atingir a camada de banco de dados / persistência (o refresh_tokenque você provavelmente encontrou).

rmharrison
fonte
Obrigado, e quanto ao Mac na autorização, o Mac e o Bearer são iguais?
laoqiren
Melhor resposta em outro lugar, por exemplo: dzone.com/articles/oauth-20-bearer-token-profile
rmharrison