ASP.NET Core如何自动刷新JWT Token以实现无缝续期?
- 内容介绍
- 文章标签
- 相关推荐
本文共计509个文字,预计阅读时间需要3分钟。
目录+原理+实现+结论+前言:为确保安全性,我们可以设置JWT Token较短的过期时间。但这样做会导致客户端频繁跳转到登录界面,用户体验不佳。通常解决方案是增加refresh_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) { 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的方式,毕竟这样安全性会更高一些。
到此这篇关于ASP.NET Core 实现自动刷新JWT Token的文章就介绍到这了,更多相关ASP.NET Core 自动刷新 内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!
本文共计509个文字,预计阅读时间需要3分钟。
目录+原理+实现+结论+前言:为确保安全性,我们可以设置JWT Token较短的过期时间。但这样做会导致客户端频繁跳转到登录界面,用户体验不佳。通常解决方案是增加refresh_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) { 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的方式,毕竟这样安全性会更高一些。
到此这篇关于ASP.NET Core 实现自动刷新JWT Token的文章就介绍到这了,更多相关ASP.NET Core 自动刷新 内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

