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

Fed*_*ico 5 jwt

我正在尝试refresh tokens了解他们如何使用JWT,所以我可以在没有auth0API 服务的情况下使用它。

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

谢谢!

更新

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

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

我不会改变标题中的问题,因为有人可能会错误地寻找相同的东西,这会将他们带到这篇文章。

Flo*_*lli 6

令牌可以有两种类型:

  • 参考代币
  • 代币价值

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

对于第二种类型,标记包含值。为了避免更改,它们被数字签名或散列。由于它们也可能包含敏感数据,因此可以对其进行加密。

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

为什么 oauth0 发出的 Refresh 令牌是第一种类型而不是 JWT(第二种类型)?

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

缺点是您无法撤销它们。或者如果你添加了一个撤销系统,那么你必须管理和调用一个数据库。因此,按值计算的令牌应该具有非常有限的生命周期,这与刷新令牌不兼容。