如何生成刷新令牌?

Aya*_*yan 4 node.js express jwt refresh-token

我正在我的一个节点应用程序中实现 JWT。我想知道,是否有任何明确的格式/结构可以生成刷新令牌?

通过明确的格式,我的意思是刷新令牌是否包含任何像 JWT 这样的声明?

更新

让我们假设刷新令牌是:(fdb8fdbecf1d03ce5e6125c067733c0d51de209c取自Auth0)。现在,我应该从中了解什么?

  • 这是一个随机的唯一字符串吗?
  • 这是一个内部有声明的加密字符串吗?

Aks*_*hay 8

简答

  • Arefresh-token只是一个随机字符串。
  • 包括索赔在内的所有与用户相关的信息都进入 access-tokens

解释

你应该保持这样的东西:

{
  _id: [refreshTokenId],
  value: 'fdb8fdbecf1d03ce5e6125c067733c0d51de209c',
  userId: [userId],
  expires: [some date],
  createdByIp: [some ip],
  createdAt: [some date],
  replacedBy: [anotherRefreshTokenId],
  revokedByIp: [some other ip],
  revokedAy: [some other date],
}
Run Code Online (Sandbox Code Playgroud)

刷新令牌是由身份验证服务器生成的随机字符串。它们是在成功验证后生成的(例如,如果用户的用户名和密码有效)。

它们的唯一目的是消除反复交换用户凭据的需要。

它们不同于访问令牌。access-token通常包含有关用户的信息(如姓名、声明)。这些通常是短暂的。JWT 就是一个例子。要获得 JWT,应用程序必须验证凭据。为了增加额外的安全性,并停止每 15 分钟为用户名和密码打扰用户,我们只需创建a signature on the server-side并将其转发到应用程序。下次,每当应用程序需要创建 JWT 时,它只需将签名发送回服务器即可。此签名是您的刷新令牌。刷新令牌也应该保存在某处。因此,您可能会在数据库中创建一个表/集合,将refresh-token值与userIds和链接起来ip_address

这就是您可以为用户创建会话管理面板的方式。然后,用户可以查看我们为其注册了刷新令牌的所有设备(ip_addresses)。

  • 谢谢。我一直在寻找这样的答案。 (2认同)
  • 为什么刷新令牌没有使用jwt?如果只是一个随机字符串,如何设置令牌的过期时间?或者永不过期?将 jwt 与刷新令牌一起使用怎么样?@阿克谢·库马尔 (2认同)
  • 刷新令牌只是服务器生成的随机乱码,保存在数据库记录中,其中包含用户 ID、过期时间戳和状态(活动/过期/已替换/您有什么)。当会话过期时,服务器只需要两件事来发出新的访问令牌(带有用户信息):随机乱码和 userId。如果服务器找到与 gibberish:userId 对匹配且状态为活动的数据库记录,则会发出 accessToken。我希望这能澄清一些事情。@海豚 (2认同)