如何生成刷新令牌?

时间:2019-05-14 14:41:29

标签: node.js express jwt refresh-token

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

按确定的格式,我的意思是刷新令牌是否包含任何声明,如JWT?

更新

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

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

1 个答案:

答案 0 :(得分:2)

简短答案

  • refresh-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],
}

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

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

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

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