ASP.NET Core 自动刷新JWT Token

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)

    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的方式,毕竟这样安全性会更高一些。

想了解更多内容,请关注我的个人公众号”My IO“

以上是关于ASP.NET Core 自动刷新JWT Token的主要内容,如果未能解决你的问题,请参考以下文章

C# Jwt 令牌生成失败 asp.net core 2.2

ASP.net Core 2.0 JWT 令牌刷新

ASP.NET Core Web Api之JWT刷新Token

将 JWT 自动加载到 User.Identity (ASP.NET Core 3.1)

使用 AspNetUserTokens 表在 ASP.NET Core Web Api 中存储刷新令牌

ASP.NET Core 2.2 : 二十七. JWT与用户授权(细化到Action)