处理.net mvc应用程序中的JWT过期

本文关键字:JWT 过期 应用程序 net mvc 处理 | 更新日期: 2023-09-27 18:11:54

我有一个ASP。NET mvc应用程序,它在Session中存储来自我的Web API的jwt令牌和刷新令牌。我的问题是,当jwt -令牌到期,是时候刷新它时该怎么办。正如我所看到的,我的两个选项是:

  1. 尝试使用jwt令牌向Web API发出请求,如果返回401 Unauthorized,尝试刷新jwt令牌。

  2. 使用定时器在jwt令牌到期前自动刷新。

使用这两种方法的优点是什么,我如何以一种简单的方式通过编程实现它们?例如,如果我使用选项1,我是否必须为每次调用API使用try和catch ?

处理.net mvc应用程序中的JWT过期

我决定使用选项2,以尽量减少对API的调用次数。然后,我用HttpClient工厂方法创建了一个基控制器类,该方法还检查JWT是否即将过期:

        public HttpClient GetHttpClient(string baseAdress)
        {
            var client = new HttpClient();
            client.BaseAddress = new Uri(baseAdress);
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            string token;
            if (Session["access_token"] != null)
            { 
                var jwthandler = new JwtSecurityTokenHandler();
                var jwttoken = jwthandler.ReadToken(Session["access_token"] as string);
                var expDate = jwttoken.ValidTo;
                if (expDate < DateTime.UtcNow.AddMinutes(1))
                    token = GetAccessToken().Result;
                else
                    token = Session["access_token"] as string;
            }
            else
            {
                token = GetAccessToken().Result;
            }
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
            Session["access_token"] = token;
            return client;
        }