我正在尝试在Angular 5 SPA中使用MSAL库。我对AcquireTokenSilent()函数的行为感到有些困惑。
当前,在我的应用程序中,我需要每5分钟刷新一次访问令牌。据我了解,由于MSAL.js使用隐式授予流,因此它不允许我们刷新令牌。
因此尝试使用AcquireTokenSilent()函数来获取新令牌,并且确实会返回新令牌,以及该令牌的新到期日。一旦我的应用程序通过了ADB2C配置的“具有OpenID Connect的Web应用程序会话”时间(分钟),此函数就不会返回令牌,并告诉我用户会话已到期。这是预期的行为。
现在我的问题是:
AcquireTokenSilent()函数在内部的行为如何?
我可以让该函数的用户每5分钟获取一次新令牌吗?我们是否可以链接此访问令牌以根据刷新令牌的生存期获得新令牌。当前不确定在什么基础上获取新令牌。目前,它会获取新令牌,直到“带有OpenID Connect的Web应用会话”仍然有效为止。
答案 0 :(得分:0)
AcquireTokenSilent()函数在内部如何表现?
它首先尝试从其缓存中获取令牌。
然后,如果失败,它将使用隐藏的iframe尝试获取新的iframe。
它使用的URL与常规登录相同,只是使用prompt=none
。
如果用户具有活动会话,这将使其在重定向中返回令牌。
如果会话已过期,则会返回错误。
这是用于acquireTokenSilent的JSDoc:
/*
* Used to get the token from cache.
* MSAL will return the cached token if it is not expired.
* Or it will send a request to the STS to obtain an access_token using a hidden iframe. To renew idToken, clientId should be passed as the only scope in the scopes array.
* @param {Array<string>} scopes - Permissions you want included in the access token. Not all scopes are guaranteed to be included in the access token. Scopes like "openid" and "profile" are sent with every request.
* @param {string} authority - A URL indicating a directory that MSAL can use to obtain tokens.
* - In Azure AD, it is of the form https://<tenant>/<tenant>, where <tenant> is the directory host (e.g. https://login.microsoftonline.com) and <tenant> is a identifier within the directory itself (e.g. a domain associated to the tenant, such as contoso.onmicrosoft.com, or the GUID representing the TenantID property of the directory)
* - In Azure B2C, it is of the form https://<instance>/tfp/<tenant>/<policyName>/
* - Default value is: "https://login.microsoftonline.com/common"
* @param {User} user - The user for which the scopes are requested.The default user is the logged in user.
* @param {string} extraQueryParameters - Key-value pairs to pass to the STS during the authentication flow.
* @returns {Promise.<string>} - A Promise that is fulfilled when this function has completed, or rejected if an error was raised. Resolved with token or rejected with error.
*/
我可以让此功能的用户每5分钟获取一次新令牌吗?我们是否可以链接此访问令牌以根据刷新令牌的生存期获得新令牌。当前不确定在什么基础上获取新令牌。目前,它会获取新令牌,直到“带有OpenID Connect的Web应用会话”仍然有效。
本机应用程序没有刷新令牌。 它们在不受信任的环境中运行,因此无法通过刷新令牌信任。
您应该使用的方法是:
尝试使用acquireTokenSilent获取令牌。 如果失败,请重新验证用户身份/向他们显示一个页面,说明他们需要再次登录并单击+按钮。