我目前正在尝试使用webapi开发SPA应用程序,我正在使用msal进行登录。该流程是用户登录,使用acquiretokensilent方法获取一个idtoken(用于授权我的api),获取访问令牌(用于图形api)。我通过在范围内传递clientID来使用Acquisitiontokensilent在一个小时前更新idToken。但是我仍然在idToken过期后注销了。我看到它没有在浏览器存储中刷新。
所以我的问题是,我是否仍可以续签id令牌并保持用户登录状态?任何帮助都会很棒。
答案 0 :(得分:1)
acquireTokenSilent(范围:数组,权限?:字符串,用户?:用户,extraQueryParameters ?:字符串):Promise-用于从缓存中获取令牌。如果未过期,MSAL将返回缓存的令牌,否则,它将使用隐藏的iframe向STS发送请求以获取访问令牌。要续订idToken,应将clientId作为范围数组中的唯一范围传递。
https://github.com/AzureAD/microsoft-authentication-library-for-js/wiki/Public-APIs
是否有机会尝试刷新令牌时实际上是从缓存中检索令牌,因为它尚未过期?
答案 1 :(得分:0)
Azure AD中ID令牌的到期时间为1小时。只要与AAD的用户会话处于活动状态,acquireTokenSilent方法将能够续签idtokens。但是,如果AAD会话已过期,则令牌更新将导致失败。您需要通过交互式呼叫来提示用户重新登录,以处理失败。
答案 2 :(得分:-1)
很遗憾,AAD不支持刷新ID令牌。仅访问令牌可以刷新。参见此处:https://azure.microsoft.com/en-us/documentation/articles/active-directory-protocols-oauth-code/#refreshing-the-access-tokens。此外,如果您想进一步了解令牌,请参阅document。