【问题标题】:MSAL token expires after 1 hourMSAL 令牌在 1 小时后过期
【发布时间】:2017-11-15 01:38:56
【问题描述】:

我在 Xamarin 应用程序中使用 MSAL 进行 Azure AD 身份验证。令牌的有效期为 1 天(使用 AuthenticationResult 的 ExpiresOn 的值查看)。 我的问题是,1 小时后,AcquireTokenSilentAsync 失败,然后需要调用 AcquireToken。

我无法理解,即使令牌有效期为 1 天,并且刷新令牌的有效期更长,为什么每隔 1 小时就要求进行身份验证? 这可以使用任何参数值或任何其他方式更改吗?

【问题讨论】:

  • 您将需要显示一些您进行身份验证的代码并尝试使用令牌。

标签: azure authentication xamarin msal


【解决方案1】:

澄清一下,MSAL 实际上并不颁发令牌或决定令牌过期,而是从 Azure AD STS 提取获取令牌。

调用 AcquireTokenSilentAsync 时,MSAL 将在过期后自动刷新您的访问令牌。由于某种令牌缓存未命中,您可能无法获得自动静默刷新。如果没有看到您的代码,很难说出具体问题,但我建议将其与official MSAL Xamarin code sample 进行比较。

如果您正在构建 Xamarin 应用程序,那么它就是一个公共客户端。目前的默认令牌到期时间是:

访问令牌: 1 小时

刷新令牌: 90 天,14 天非活动滑动窗口

Azure AD 允许您在 PowerShell 中配置这些令牌过期时间。您可以定义一个令牌生命周期策略,然后将其分配给特定的服务主体、跨租户/组织或应用程序对象。要记住的另一件事是,如果您为特定资源请求令牌,则必须在该资源而不是请求服务主体或应用程序上设置策略。有关这方面的更多信息,请查看configuring token lifetime in Azure AD

【讨论】:

    【解决方案2】:

    TokenCache 存在问题,原因是未正确存储令牌,我遇到了异常。这已在较新版本的 Xamarin Android 中得到解决。错误定义here

    【讨论】:

      猜你喜欢
      • 2018-01-20
      • 1970-01-01
      • 2019-03-06
      • 2012-11-13
      • 2017-08-17
      • 2013-03-03
      • 2020-06-07
      • 2020-02-23
      • 1970-01-01
      相关资源
      最近更新 更多