缅甸小勐拉99厅17649117476
为了安全性考虑,我们可以设置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);
}
更多相关文章
- Android(安卓)时间、日期处理 DateUtils、SystemClock、DateForm
- Android(安卓)为【apk】文件签名,增加修改系统时间等权限
- android 自定义时间控件
- android:打开Eclipse之后android项目都报错怎么解决
- Android获取当前时间
- android源码浅析--notification
- Android执行shell命令
- Android(安卓)demo倒计时原理(CountDownTimer原理)
- android 自定义时间控件