信息发布→ 登录 注册 退出

ASP.NET Core 实现自动刷新JWT Token

发布时间:2026-01-11

点击量:
目录
  • 原理
  • 实现
  • 结论

前言:

为了安全性考虑,我们可以设置JWT Token较短的过期时间,但是这样会导致客户端频繁地跳到登录界面,用户体验不好。

正常解决办法是增加​​refresh_token​​,客户端使用refresh_token去主动刷新JWT Token。

这里介绍一种变通的方式,自动刷新JWT Token

原理

我们读取每个请求的​​Authorization​​头,获得当前请求的JWT Token。

检查当前token的过期时间,如果在30分钟以内,那么我们就生成一个具有新过期时间的JWT Token,并通过​​X-Refresh-Token​​头返回。

客户端检查到​​X-Refresh-Token​​头,就将保存的JWT Token替换掉,下次发送请求就是用最新的token了。

实现

创建一个Middleware它的作用是检查JWT Token过期时间并生成新token返回:

public async Task InvokeAsync(HttpContext context)
{
JwtSecurityToken token = null;
string authorization = context.Request.Headers["Authorization"];

if (!string.IsNullOrEmpty(authorization)
&& authorization.StartsWith("Bearer "))
token = new JwtSecurityTokenHandler().
ReadJwtToken(authorization.Substring("Bearer ".Length));

//刷新Token
if (token != null
&& token.ValidTo > DateTime.UtcNow
&& token.ValidTo.AddMinutes(-30) <= DateTime.UtcNow)
{
context.Response.Headers.Add("X-Refresh-Token",
await RefreshTokenAsync(token));
}

await _next(context);
}

结论

当然,推荐大家尽量使用​​refresh_token​​的方式,毕竟这样安全性会更高一些。

在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!