Как функция AcquireTokenSilent () ведет себя внутренне?
Сначала он пытается получить токен из своего кэша.
Затем, если это не удается, он использует скрытый iframe, чтобы попытаться получить новый.
Используемый для него URL-адрес такой же, как и для обычного входа, за исключением того, что используется prompt=none
Это заставляет его возвращать токен в перенаправлении, если у пользователя есть активный сеанс.
Если сеанс истек, он возвращает ошибку.
Вот JSDoc для acquTokenSilent:
/*
* 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" не будет активен.
Для нативного приложения нет токенов обновления.
Они работают в ненадежной среде и поэтому им нельзя доверять с помощью маркера обновления.
Подход, который вы должны использовать:
Попробуйте получить токен с acquTokenSilent.
Если это не удается, повторно аутентифицируйте пользователя / покажите ему страницу, объясняющую, что ему необходимо снова войти в систему + кнопка для этого.