JWT和Bearer Token有什么区别?


105

我正在学习有关授权的一些​​知识,例如Basic,Digest,OAuth2.0,JWT和Bearer Token。

现在我有一个问题。

您知道JWT被用作OAuth2.0标准中的Access_Token。JWT出现在RFC 7519上,而Bearer Token出现在RFC 6750上。

例如,承载:

Authorization: Bearer <token>

我曾经通过AJAX将令牌发送到服务器,或者将令牌添加到url的查询字符串中。我知道令牌也可以通过将其添加到请求标头中来发送。这是否意味着应该将令牌添加到Authorization Bearer标头中?

您能告诉我JWT和Bearer Token之间的关系吗?非常感谢。

Answers:


85

JWT是令牌的编码标准,其中包含可以签名和加密的JSON数据有效载荷。

JWT可以用于很多事情,其中​​包括不记名令牌,即可以提供给某项服务的一条信息,由于拥有它(您是“承载者”),您才可以访问某些东西。

承载令牌可以以不同的方式包含在HTTP请求中,其中之一(可能是首选)是授权标头。但是您也可以将其放入请求参数,cookie或请求正文中。那主要是在您和您要访问的服务器之间。


然后如何解析Authorization标头中的令牌,有一个Bearer,我必须使用String.slice(),是否有任何中间件来解析它?
laoqiren

我正在使用Node.js
laoqiren

auth-header如果您需要最小的解析器,请使用软件包
Demurgos

1
或只使用String.slice():)
保罗·西尔斯玛

138

简短答案

JWT是编码验证 声明的便捷方法。

Bearer令牌只是用于授权的字符串,可能是任意字符串。

上下文(故事时间)

几年前,在JWT革命之前,a <token>只是一个没有内在含义的字符串,例如2pWS6RQmdZpE0TQ93X。然后,该令牌查到的在数据库中,其持有的索赔该令牌。这种方法的缺点是每次使用令牌时都需要进行数据库访问(或缓存)。

JWT 自己的声明进行编码验证(通过签名)。这使人们可以发布无状态的短期JWT(阅读:独立的,不依赖于其他任何人)。他们不需要打数据库。这减少了数据库负载并简化了应用程序架构,因为只有发出JWT的服务才需要担心到达数据库/持久层(您可能遇到过)。refresh_token


谢谢,关于授权中的Mac,Mac和Bearer相同吗?
laoqiren


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.