JWT和Bearer Token有什么区别?

lao*_*ren 77 oauth token jwt

我正在学习像Basic,Digest,OAuth2.0,JWT和Bearer Token这样的授权.

现在我有一个问题.

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

例如,持票人:

Authorization: Bearer <token>
Run Code Online (Sandbox Code Playgroud)

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

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

rmh*_*son 85

简短的回答

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

承载令牌只是字符串,可能是任意的,用于授权.

背景(故事时间)

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

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


Thi*_*ilo 63

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

JWT可用于许多事物,其中包括持有人令牌,即您可以提供给某些服务的信息,凭借您拥有它(您是"持票人")授予您访问某些内容的权限.

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


Tho*_*olf 7

请求中标头的值Authorization包含服务器可以用来授权请求​​的值。

标头采用以下格式:

Authorization: <auth-scheme> <authorization-parameters>
Run Code Online (Sandbox Code Playgroud)

auth schema 告诉我们什么类型的值被设置为参数。

定义了多种类型的模式,以下是一些示例:

  • 基本的
  • 承载者
  • 消化

这里有一个更完整的列表。

因此,承载者是一种身份验证模式。

不记名令牌可以有不同的格式。JWT是令牌的一种格式,另一种令牌格式称为不透明令牌。

JWT是一个 base64 编码的 Json 格式的字符串,包含标头部分、主体部分和最后一个签名部分在这种类型的令牌中,您可以添加不同的令牌claims,它们声明某些内容(例如用户名、电子邮件地址、角色等)

虽然不透明令牌只是一个随机的唯一字符串,但它是不透明的,不包含任何附加信息。

JWT 令牌和不透明令牌是不同的不记名令牌格式。

如何使用它们以及何时使用它们是一个巨大的讨论。用法有好有坏。但这两种方式通常在实现 oauth2 时使用,但还有其他几种用户案例。

我已经看到 JWT 被发送到正文中以仅发送签名数据。所以说实话,JWT 只是一些数据的一种格式。它不一定需要是令牌。