我在 Xamarin 应用程序中使用 MSAL 进行 Azure AD 身份验证。令牌的有效期为 1 天(使用 AuthenticationResult 的ExpiresOn值查看)。我的问题是,1 小时后,AcquireTokenSilentAsync 失败,然后需要调用 AcquireToken。
我无法理解,即使令牌有效期为 1 天,并且刷新令牌的有效期更长,为什么每隔 1 小时要求验证一次?这可以使用任何参数值或任何其他方式进行更改吗?
我在 Xamarin 应用程序中使用 MSAL 进行 Azure AD 身份验证。令牌的有效期为 1 天(使用 AuthenticationResult 的ExpiresOn值查看)。我的问题是,1 小时后,AcquireTokenSilentAsync 失败,然后需要调用 AcquireToken。
我无法理解,即使令牌有效期为 1 天,并且刷新令牌的有效期更长,为什么每隔 1 小时要求验证一次?这可以使用任何参数值或任何其他方式进行更改吗?
澄清一下,MSAL 实际上并不颁发令牌或决定令牌过期,而是从 Azure AD STS 提取获取令牌。
调用 AcquireTokenSilentAsync 时,MSAL 将在过期后自动刷新您的访问令牌。由于某种令牌缓存未命中,您可能无法获得自动静默刷新。如果没有看到您的代码,很难说出具体问题,但我建议将其与官方 MSAL Xamarin 代码示例进行比较。
如果你正在构建一个 Xamarin 应用程序,那么它就是一个公共客户端。现在的默认令牌到期时间是:
访问令牌: 1 小时
刷新令牌: 90 天,14 天非活动滑动窗口
Azure AD 允许您在 PowerShell 中配置这些令牌过期时间。您可以定义令牌生命周期策略,然后将其分配给特定的服务主体、跨租户/组织或应用程序对象。要记住的另一件事是,如果您要为特定资源请求令牌,则必须在该资源而不是请求服务主体或应用程序上设置策略。有关这方面的更多信息,请查看在 Azure AD 中配置令牌生命周期。
TokenCache 存在问题,因为没有正确存储令牌,我遇到了异常。这已在较新版本的 Xamarin Android 中得到解决。此处定义的错误