【问题标题】:how do we renew idtoken using msal?我们如何使用 msal 更新 idtoken?
【发布时间】:2019-01-22 16:23:04
【问题描述】:

我目前正在尝试使用 webapi 开发一个 SPA 应用程序,我正在使用 msal 进行登录。流程是用户登录,获取一个idtoken(用于授权我的api),使用acquiretokensilent方法获取一个访问令牌(用于graph api)。我在一小时前使用acquiretokensilent通过在范围内传递clientID来更新idToken。但是在 idToken 过期后我仍然注销。我看到它没有在浏览器存储中刷新。

所以我的问题是,无论如何我可以更新 id 令牌并让用户保持登录状态吗?任何帮助都会很棒。

【问题讨论】:

    标签: azure-active-directory azure-ad-b2c msal msal.js


    【解决方案1】:

    Azure AD 中 ID 令牌的过期时间为 1 小时。只要与 AAD 的用户会话处于活动状态,acquireTokenSilent 方法就能够更新 idtoken。但是,如果 AAD 会话过期,令牌更新将导致失败。您需要通过交互式呼叫提示用户重新登录来处理故障。

    您可以阅读here 了解扩展已登录 AAD 会话的方法。此外,您还可以选择为 id 令牌配置生命周期策略,如文档中的 here 所述。

    【讨论】:

      【解决方案2】:

      acquireTokenSilent(scopes: Array, authority?: string, user?: User, extraQueryParameters?: string): Promise - 用于从缓存中获取令牌。 MSAL 将返回缓存的令牌(如果未过期),或者它会向 STS 发送请求以使用隐藏的 iframe 获取访问令牌。要更新 idToken,应将 clientId 作为范围数组中的唯一范围传递。

      https://github.com/AzureAD/microsoft-authentication-library-for-js/wiki/Public-APIs

      当您尝试刷新令牌时,是否有可能实际上是从缓存中检索它,因为它尚未过期?

      【讨论】:

      • 感谢您的回复。我确实阅读了这个文档,我确实检查了令牌到期时间并且它确实更新了,所以我确定它不是从缓存中获取的。
      【解决方案3】:

      很遗憾,AAD 不支持刷新 ID 令牌。只能刷新访问令牌。见这里:https://azure.microsoft.com/en-us/documentation/articles/active-directory-protocols-oauth-code/#refreshing-the-access-tokens。另外,如果您想了解更多关于token的信息,请参考document

      【讨论】:

      • 我没有刷新它,我正在尝试更新它。当您仅将 appid 作为范围传递给 acquiretokensilent 方法时,您将获得一个新的 idToken。我知道隐式流程不允许您刷新令牌。
      猜你喜欢
      • 1970-01-01
      • 2019-09-01
      • 2021-12-30
      • 2016-06-26
      • 2017-10-30
      • 2021-02-10
      • 1970-01-01
      • 1970-01-01
      • 2021-04-15
      相关资源
      最近更新 更多