【问题标题】:Handling JWT expiration in .NET MVC-application在 .NET MVC 应用程序中处理 JWT 过期
【发布时间】:2017-02-14 02:05:49
【问题描述】:

我有一个 ASP.NET MVC 应用程序,它在 Session 中存储来自我的 Web API 的 JWT 令牌和刷新令牌。我的问题是当 JWT 令牌过期并且是时候刷新它时该怎么办。在我看来,我的两个选择是:

  1. 尝试使用 JWT-token 向 Web API 发出请求,如果返回 401 Unauthorized,请尝试刷新 JWT-token。

  2. 使用计时器在 JWT 令牌过期之前自动刷新它。

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

【问题讨论】:

  • 在 Session 中存储来自我的 Web API 的 JWT 令牌和刷新令牌 为什么要存储在会话中?

标签: c# asp.net asp.net-mvc session jwt


【解决方案1】:

我决定使用选项 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;
        }

【讨论】:

    猜你喜欢
    • 2019-09-13
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    • 2020-03-24
    • 2017-12-23
    • 1970-01-01
    • 2019-09-11
    • 2019-04-06
    相关资源
    最近更新 更多