【问题标题】:Proper way to get an Azure AD Access Token expiration date获取 Azure AD 访问令牌到期日期的正确方法
【发布时间】:2020-11-16 16:09:22
【问题描述】:

基于Get expire time of OAuth session,我创建了一个简单的方法来检索到期日期。我使用了两个答案并得到了不同的结果:

        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;

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

【问题讨论】:

  • 它们相差多少?您是否考虑过时区?
  • 请记住,在内部,JWT 始终将过期数据保持为 UTC。您可以通过 JWT 令牌浏览器轻松查看它,例如 jwt.msjwt.ms tokenResponse.ExpiresIn 是基于 MS 身份的,正如文档所说“访问令牌的有效时间(以秒为单位)。”
  • 您可以使用DateTime.UtcNow,而不是在DateTime.Now 中添加秒数,然后检查两个日期,它将显示相同的日期或准确的结果。

标签: c# .net-core oauth-2.0 azure-active-directory


【解决方案1】:

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

只需将tokenExpireDate1转换为UTC时间,你会发现两个日期是一样的。

DateTime tokenExpireDate11 = TimeZoneInfo.ConvertTimeToUtc(tokenExpireDate1);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 2019-05-15
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    相关资源
    最近更新 更多