asp.net-core - 黑名单/验证/生成 JWT 刷新令牌
问题描述
成功登录后,我会发出访问令牌和刷新令牌。它们都保存在浏览器中的相同站点 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);
解决方案
存储刷新令牌时必须非常小心,并且必须将它们保存在某个秘密位置,否则您会知道后果。
我假设您在这里使用“授权代码流”。因此,根据用户名将刷新令牌存储在数据库中是一个好主意,您可以添加一个额外的列,例如“IsRevoked”以用于状态目的,然后您可以将基于用户名和 isrevoked 状态的令牌列入黑名单/白名单。
请参阅有关存储令牌的链接。
推荐阅读
- sql - Spark sql-基于另一个聚合选项进行聚合
- node.js - 如何使用用两种不同语言(Flask、Node.js)编写的后端 docker 在单个服务器上运行
- android - 使用 customword 数组适配器而不是资源字符串数组 KOTLIN
- javascript - 询问如何在 Telegram 中为内联查询创建数组
- r - 在 R 中选择多个历史日期后,Rvest Web 抓取
- c++ - 将 [[no_unique_address]] 与空基类继承组合时得到意外结果
- go - 使用 GORM 将接口设置为具有许多实现的属性
- javascript - babel 如何理解何时导入本地路径以及何时从同名库中导入?
- angular - 根据输入值更改输出类型
- jq - 使用 JQ 将 JSON 对象转换为数组