JWT令牌和刷新令牌之间有什么区别?

时间:2018-10-21 01:13:14

标签: jwt

我正在努力了解refresh tokens以及它们如何与JWT配合使用,因此我可以在没有auth0 API服务的情况下使用它。

  • 为什么刷新令牌格式与JWT不同?
  • 刷新令牌仅仅是存储在数据库中的简单令牌吗?
  • 使用刷新令牌获取JWT令牌的流程如何?

谢谢!

更新

如@Florent Morselli所建议。这篇文章的基本问题是错误和令人困惑的。由于JWT和刷新令牌并不是真正可以关联的概念。一个更好的问题可以是:

  • JWT令牌和不透明令牌之间有什么区别?
  • 访问令牌和刷新令牌有什么区别?

我没有更改标题中的问题,因为有人可能会错误地寻找同一件事,这将导致他们进入这篇文章。

2 个答案:

答案 0 :(得分:2)

令牌可以有两种类型:

  • 参考代币
  • 按价值划分的代币

对于第一种类型,令牌是不透明的字符串(通常是随机字符串),它们是存储与令牌关联的值的数据库索引。

对于第二种类型,标记包含值。为避免更改,它们经过数字签名或哈希处理。由于它们还可能包含敏感数据,因此可以对其进行加密。

JSON Web令牌是一套规范(主要是RFC7515RFC7520),为第二种类型引入了新格式。

  

为什么由oauth0发出的刷新令牌属于第一类而不是JWT(第二类)?

按值表示令牌的主要好处是它们可以是无状态的,即您不需要任何类型的数据库。 当令牌多次发送到服务器时,这非常有用,因为它们可以大大减少数据库调用,从而减少响应时间。

缺点是您无法撤消它们。或者,如果添加撤消系统,则必须管理和调用数据库。 因此,按值分配的令牌应具有非常有限的生存期,与刷新令牌不兼容。

答案 1 :(得分:0)

根据OpenID规范,

刷新令牌用于代码流混合流中,请参见下图

enter image description here 参考:https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowSteps

为什么刷新令牌格式与JWT不同?

刷新令牌的格式也符合OpenID的规范 enter image description here

参考:https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowSteps

刷新令牌仅仅是存储在数据库中的简单令牌吗?

刷新令牌将由您的IDP(身份提供者动态生成)。

如何使用刷新令牌获取JWT令牌?

拥有上一步中所示的刷新令牌后,您可以使用刷新令牌向令牌端点请求以获取访问令牌 >

访问令牌

enter image description here