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

Posted

技术标签:

【中文标题】黑名单/验证/生成 JWT 刷新令牌【英文标题】:blacklisting/validating/generating JWT Refresh Tokens 【发布时间】:2021-06-12 07:24:46 【问题描述】:

我在成功登录后发出访问令牌和刷新令牌。它们都保存在浏览器中的相同站点 cookie 中。自定义中间件将在身份验证过程之前将令牌放入 Authorization 标头中。该中间件还将检查访问令牌是否过期,如果是,它将尝试刷新令牌,如果验证将保存两个新的 cookie(新的刷新令牌和新的访问令牌)并将新生成的访问令牌与当前要求。 这是我们应该如何实现刷新令牌的方式吗?如果我想将特定的刷新令牌列入黑名单,是否应该将所有刷新令牌保存在数据库中?

 string auth = httpContext.Request.Cookies["AuthToken"];
 if(string.IsNullOrEmpty(auth))
 
   httpContext.Request.Headers.Add("Authorization", $"AuthorizationCookieNotFound");
   return _next(httpContext); //That token wont be accepted i just
   // put it there for the sake of demonstration



 
 httpContext.Request.Headers.Add("Authorization", $"Bearer auth");
 return _next(httpContext);

【问题讨论】:

【参考方案1】:

在存储刷新令牌时必须非常小心,并且必须将它们保存在某个秘密的地方,否则您会知道后果。

我假设您在这里使用“授权代码流”。因此,根据用户名将刷新令牌存储在数据库中是一个好主意,您可以添加一个额外的列,例如“IsRevoked”以用于状态目的,然后您可以将基于用户名和已撤销状态的令牌列入黑名单/白名单。

有关存储令牌的信息,请参阅this 链接。

【讨论】:

以上是关于黑名单/验证/生成 JWT 刷新令牌的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Simple JWT(django rest)将 JWT 令牌列入黑名单?

安全的单站点 JWT 实施

Laravel JWT 刷新令牌中间件和并发请求

PHP-Open-Source-Saver / jwt-auth 无效和黑名单 JWT 令牌

flask-jwt-extended 库中的黑名单是不是有宽限期?

如果用户想从不同的机器上退出帐户,JSON Web 令牌 (JWT) 是不是会被拒绝或列入黑名单?