黑名单/验证/生成 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 令牌列入黑名单?
PHP-Open-Source-Saver / jwt-auth 无效和黑名单 JWT 令牌