首页 > 解决方案 > 黑名单/验证/生成 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);

标签: asp.net-core.net-corejwtasp.net-core-webapi

解决方案


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

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

请参阅有关存储令牌的链接


推荐阅读