JWT 刷新令牌必须有啥声明?它可以与访问令牌相同(具有更长的exp)吗?

Posted

技术标签:

【中文标题】JWT 刷新令牌必须有啥声明?它可以与访问令牌相同(具有更长的exp)吗?【英文标题】:What is the MUST have claims for JWT refresh tokens? Can it be identical to the access token (with a longer exp)?JWT 刷新令牌必须有什么声明?它可以与访问令牌相同(具有更长的exp)吗? 【发布时间】:2021-09-23 09:36:15 【问题描述】:

我正在使用 JWT 创建自定义访问令牌系统。我已经创建了一个用于签署和验证 JWT 访问令牌的系统。

但是,我发现很难获得有关刷新令牌应包含哪些声明的信息。

我是否应该创建与访问令牌相同的刷新令牌 - 具有更长的过期时间,以便可以使用验证访问令牌的相同函数来验证刷新令牌?

【问题讨论】:

使用 JWT 作为刷新令牌是一个非常糟糕的主意。您将面临安全问题,特别是因为这种令牌类型无法撤销(如果您确实实现了撤销系统,则根本不需要 JWT)。就令牌的内容而言,它通常至少相当于颁发的访问令牌。 【参考方案1】:

刷新令牌通常是一个不透明的值,仅供客户端用于刷新访问令牌。流程是这样的:

Web 或移动客户端实施 OpenID Connect 来验证用户并获取令牌 - 在某些情况下会提示用户同意

授权服务器 (AS) 发出令牌并将此“委托”的详细信息存储在数据库中 - 令牌是指向此状态的指针

客户端向 API 发送访问令牌,直到收到 401 过期响应

客户端然后尝试通过将刷新令牌发送到授权服务器来刷新访问令牌,然后从存储的状态中查找声明详细信息

我会确保您正确承担这些责任 - 特别是避免构建您自己的 AS 并使用专家提供的免费 AS,例如 Curity Community Edition。许多安全解决方案将更容易开发。

【讨论】:

以上是关于JWT 刷新令牌必须有啥声明?它可以与访问令牌相同(具有更长的exp)吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 JWT 刷新令牌如何安全?

JWT 访问令牌和刷新令牌安全性

AWS Cognito:将自定义声明/属性添加到 JWT 访问令牌

具有长 TTL 的引用令牌和刷新令牌+短寿命 JWT 有啥区别?

刷新令牌的工作原理(使用 jwt)

在永久存储中跟踪 JWT