我正在我的一个节点应用程序中实现JWT。我想知道,是否有任何明确的格式/结构,其中应该生成刷新令牌?通过明确的格式,我的意思是刷新令牌是否包含像JWT那样的声明?
更新
让我们假设刷新令牌为:fdb8fdbecf1d03ce5e6125c067733c0d51de209c(取自Auth0)。现在,我该怎么理解这件事?
fdb8fdbecf1d03ce5e6125c067733c0d51de209c
waxmsbnn1#
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], revokedBy: [some other date], }
刷新令牌是身份验证服务器生成的随机字符串。它们在成功验证后生成(例如,如果用户的用户名和密码有效)。它们的唯一目的是消除重复交换用户凭证的需要。它们与访问令牌不同。access-token通常包含用户的信息(如姓名、声明)。这些通常是短暂的。JWT就是一个例子。要获得JWT,应用程序必须验证凭据。为了增加额外的安全性,并停止每15分钟打扰用户输入用户名和密码,我们只需创建a signature on the server-side并将其转发到应用程序。下一次,每当应用程序需要创建JWT时,它只需将签名发送回服务器即可。此签名是您的刷新令牌。刷新令牌也应该保存在某个地方。因此,您可能会在数据库中创建一个表/集合,将refresh-token值与userIds和ip_address链接起来。
access-token
a signature on the server-side
userIds
ip_address
xurqigkl2#
refresh-token也可以以与access-token相同的方式生成。只要确保在两者中包含一个名为“token_type”的额外声明即可。
{ "token_type": "refresh", "iat": 1100313360, "exp": 1100814350, "context": { "user": {"name": "joe"}, "type":["admin"] } }
这种方法在更新access-token时优于随机字符串:
2条答案
按热度按时间waxmsbnn1#
简短回答
refresh-token
只是一个随机字符串。access-tokens
中说明
你应该保留这样的东西:
刷新令牌是身份验证服务器生成的随机字符串。它们在成功验证后生成(例如,如果用户的用户名和密码有效)。
它们的唯一目的是消除重复交换用户凭证的需要。它们与访问令牌不同。
access-token
通常包含用户的信息(如姓名、声明)。这些通常是短暂的。JWT就是一个例子。要获得JWT,应用程序必须验证凭据。
为了增加额外的安全性,并停止每15分钟打扰用户输入用户名和密码,我们只需创建
a signature on the server-side
并将其转发到应用程序。下一次,每当应用程序需要创建JWT时,它只需将签名发送回服务器即可。此签名是您的刷新令牌。
刷新令牌也应该保存在某个地方。
因此,您可能会在数据库中创建一个表/集合,将
refresh-token
值与userIds
和ip_address
链接起来。xurqigkl2#
refresh-token
也可以以与access-token
相同的方式生成。只要确保在两者中包含一个名为“token_type”的额外声明即可。示例
这种方法在更新
access-token
时优于随机字符串:refresh-token
来注意可疑请求