如何生成刷新令牌?

Posted

技术标签:

【中文标题】如何生成刷新令牌?【英文标题】:How to generate a refresh token? 【发布时间】:2019-10-01 15:18:51 【问题描述】:

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

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

更新

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

这是一个随机的唯一字符串吗? 这是一个包含声明的加密字符串吗?

【问题讨论】:

JWT (JSON Web Token) automatic prolongation of expiration的可能重复 @MurtazaHussain 我猜不是,因为您发布的链接谈到了延长 JWT,而我问的是刷新令牌的格式。我想我的问题与您上面链接的问题有所不同。 auth0.com/learn/refresh-tokens @ChrisWhite,我已经阅读了这篇文章和许多其他文章。但我的问题是,刷新令牌有任何格式吗?例如:fdb8fdbecf1d03ce5e6125c067733c0d51de209c 取自您发布的文章,我可以假设这是一个随机字符串,或者它有一些加密的数据。所以现在我的意思是我应该假设什么? @ChrisWhite 好的。我已经阅读了这篇文章,目前已经使用节点加密模块实现了类似的东西。这令人困惑,因为没有关于如何生成刷新令牌的适当文档。我猜它完全是假设或要求。 【参考方案1】:

简答

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_addresses)。

【讨论】:

谢谢。我一直在寻找这样的答案。

以上是关于如何生成刷新令牌?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JWT 刷新令牌生成新的访问令牌

如何生成刷新令牌的过期时间?

如何使用外部登录提供程序创建刷新令牌?

如何使 Identity Core 生成的访问令牌无效?

如何基于使用 Oauth2 协议的身份验证改进 JWT 访问令牌和刷新令牌?

黑名单/验证/生成 JWT 刷新令牌