获取Azure AD访问令牌到期日期的正确方法



基于获取OAuth会话的过期时间,我创建了一个简单的方法来检索过期日期。我使用了两个答案,得到了不同的结果:

var tokenResponse = await httpClient.RequestClientCredentialsTokenAsync(new ClientCredentialsTokenRequest
{
Address = tokenEndpoint,
ClientId = client,
ClientSecret = secret,
GrantType = "client_credentials",
Scope = scope,
});

var currDateTime = DateTime.Now;
var tokenExpireDate1 = currDateTime.AddSeconds(tokenResponse.ExpiresIn);

var handler = new JwtSecurityTokenHandler();
var jwtToken = handler.ReadToken(tokenResponse.AccessToken) as JwtSecurityToken;
var tokenExpireDate2 = jwtToken.ValidTo;

为什么日期不同?为什么第二个日期小于当前日期?

DateTime.Now是系统本地时区中的时间,而jwtToken.ValidTo是UTC时间。

只需将tokenExpireDate1转换为UTC时间,您就会发现这两个日期是相同的。

DateTime tokenExpireDate11 = TimeZoneInfo.ConvertTimeToUtc(tokenExpireDate1);

相关内容

最新更新