托管身份令牌检查到期

时间:2020-04-30 19:45:22

标签: c# asp.net .net azure active-directory

我有一个要缓存的Azure托管身份访问令牌。我不确定检查令牌是否已过期的正确方法。我正在缓存expires_on属性,Micrososft将该属性解释为“访问令牌过期的时间跨度。该日期表示为从“ 1970-01-01T0:0:0Z UTC”开始的秒数。”

这是否意味着令牌中的expires_on属性已经是Utc格式?我不确定是否可以在Utc中检查日期时间并将其直接与之进行比较。我非常担心,如果我的逻辑错误,我将一遍又一遍地返回过期的令牌-破坏应用程序。

我当前的支票是:

var tokenExp = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
tokenExp = tokenExp.AddSeconds(Int32.Parse(cachedExpiresOn));  // cachedExpiresOn is "1588350330"

if (tokenExp > DateTime.UtcNow)
{
  // return cached token
} else 
{
  // fetch token and cache
}

1 个答案:

答案 0 :(得分:1)

根据我的测试,您的解决方案应该可以工作。

但是实际上您可以使用下面的代码直接检查它。

var jwthandler = new JwtSecurityTokenHandler();
var jwttoken = jwthandler.ReadToken("<your access_token>");
var expDate = jwttoken.ValidTo;
if (expDate < DateTime.UtcNow)
     Console.WriteLine("Expired");
else
     Console.WriteLine("Not expired");

enter image description here