ChatGPT解决这个技术问题 Extra ChatGPT

JWT 和 Bearer Token 有什么区别?

我正在学习一些有关授权的知识,例如 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 标头?

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


r
rmharrison

简短的回答

JWT 是一种编码和验证声明的便捷方式。

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

背景(故事时间)

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

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


谢谢,Mac 的 Authorization 怎么样,Mac 和 Bearer 是一样的吗?
最好在别处回答,例如:dzone.com/articles/oauth-20-bearer-token-profile
对不起,先生,几年后,但什么秘密钥匙?如果密钥只有一个,就可以了。但是,如果我们有一些公司与我们共享我们的 API,每个公司都有不同的密钥呢?我们应该做什么?我们应该将密钥存储在 Db 中吗?如果是这样,数据库关系仍然存在。不是吗?
T
Thilo

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

JWT 可用于许多事情,其中包括不记名令牌,即您可以向某些服务提供的一条信息,由于您拥有它(您是“不记名”),您可以访问某些内容。

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


那么如何解析 Authorization header 中的 token ,有一个 Bearer ,我必须使用 String.slice() ,有没有中间件可以解析呢?
我正在使用 Node.js
如果您想要一个最小的解析器,请使用 auth-header
或者只是使用 String.slice() :)
对不起,先生,几年后,但什么秘密钥匙?如果密钥只有一个,就可以了。但是,如果我们有一些公司与我们共享我们的 API,每个公司都有不同的密钥呢?我们应该做什么?我们应该将密钥存储在 Db 中吗?如果是这样,数据库关系仍然存在。不是吗?
C
Community

JWT 使用两种类型的令牌,参数令牌:访问令牌作为参数传递。 Bearer Token:它通过'Bearer'传入标题。

另请阅读以下问题:

What are Bearer Tokens and token_type in OAuth 2?