9

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

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

4

3 回答 3

3

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

您可以在此处阅读以了解扩展 Signed in AAD 会话的方法。此外,您可以选择为 id 令牌配置生命周期策略,如此所述。

于 2019-01-30T23:49:54.170 回答
1

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

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

于 2018-08-17T13:51:33.013 回答
0

不幸的是,AAD 不支持刷新 ID 令牌。只能刷新访问令牌。请参阅此处:https ://azure.microsoft.com/en-us/documentation/articles/active-directory-protocols-oauth-code/#refreshing-the-access-tokens 。此外,如果您想了解更多关于令牌的信息,请参阅文档

于 2018-08-17T06:39:37.683 回答