ASP.NET Core 自动刷新JWT Token
前言
为了安全性考虑,我们可以设置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, RequestDelegate _next) { 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
的方式,毕竟这样安全性会更高一些。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?