JWT刷新令牌实现

时间:2021-01-22 08:06:58

标签: javascript express jwt refresh-token

不是在登录后返回两个令牌,我可以将刷新令牌放在访问令牌中吗?

当访问令牌过期时,用户需要传递过期的令牌以获取新的访问令牌。当过期的令牌到达服务器时,我将从中提取刷新令牌,并检查刷新令牌的到期时间(如果没问题),然后我将返回一个包含相同刷新令牌的新令牌。如果不正常,则用户将被注销并需要登录。

2 个答案:

答案 0 :(得分:1)

可以在访问令牌中保存刷新令牌,然后在刷新时访问它,但我不明白您为什么要这样做?我从未见过有人这样做,所以我会说这可能不是一个好习惯。我会坚持在标题中将它们分开。

答案 1 :(得分:1)

您可以将刷新令牌与访问令牌结合使用。但请记住,如果您不遵循 JWT 方式,您的代码将无法与其他程序和 API 兼容。 此外,在每次向 API 发出请求时都刷新令牌可能是一个好习惯,而不仅仅是在令牌即将到期的情况下。

不确定这是否是最佳实践,但我在我的一个节点服务中这样做: https://github.com/kihyoun/system-wizard/blob/master/src/api/SyncServer.tsx#L74(客户端) https://github.com/kihyoun/system/blob/master/sync/src/index.ts(服务器)

编辑:

如果您想将两个令牌合并为一个“令牌”,您可能可以这样做:

var sb = new StringBuilder(); foreach (char c in texttoencodedecode.Text) { sb.Append(c); sb.Append(' '); } texttoencodedecode.Text = sb.ToString();

client

const authentication = { accessToken: "your accesstoken...", refreshToken: "your refreshToken...", action: "getBlogPosts" }; const data = btoa(authentication) // this creates a single ASCII String api.post('/auth', data).then(result => { if (result.status === 200) { console.log('auth successful') } else { console.log('Invalid credentials') } })

server
相关问题