【问题标题】:What's the difference between JWTs and Bearer Token?JWT 和 Bearer Token 有什么区别?
【发布时间】:2017-03-15 12:04:59
【问题描述】:

我正在学习一些有关授权的知识,例如 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之间的关系吗?非常感谢。

【问题讨论】:

    标签: oauth token jwt


    【解决方案1】:

    简答

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

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

    上下文(故事时间)

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

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

    【讨论】:

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

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

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

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

    【讨论】:

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

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

    请同时阅读以下问题:

    What are Bearer Tokens and token_type in OAuth 2?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-28
      • 2020-08-15
      • 2021-08-02
      • 1970-01-01
      • 2017-07-13
      • 2017-11-20
      • 2018-10-19
      • 2018-10-23
      相关资源
      最近更新 更多