ADB2C AcquireTokenSilent поведение - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь использовать библиотеку MSAL в моем Angular 5 SPA. Я немного озадачен поведением функции AcquireTokenSilent ().

В настоящее время в моем приложении мне нужно обновлять токен доступа каждые 5 минут. Как я понимаю, поскольку MSAL.js использует неявный поток грантов, он не позволяет обновлять токен.

Поэтому попытался использовать функцию AcquireTokenSilent () для получения нового токена, и он возвращает новый токен с новой датой истечения срока действия токена. Как только мое приложение проходит через «сеанс веб-приложения с OpenID Connect» (минуты) конфигурации ADB2C, эта функция не возвращает токен и сообщает, что сеанс пользователя истек. Это ожидаемое поведение.

Теперь мой вопрос:

  1. Как внутреннее поведение функции AcquireTokenSilent ()?

  2. Могу ли я заставить пользователя этой функции получать новый токен каждые 5 минут? Можем ли мы связать этот токен доступа, чтобы получить новый токен в зависимости от времени жизни обновленного токена. В настоящее время не уверен, на каком основании он получает новый токен. В настоящее время он получает новый токен до тех пор, пока «сеанс веб-приложения с OpenID Connect» не будет активен.

1 Ответ

0 голосов
/ 02 ноября 2018

Как функция 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://&lt;tenant&gt;/&lt;tenant&gt;, where &lt;tenant&gt; is the directory host (e.g. https://login.microsoftonline.com) and &lt;tenant&gt; 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://&lt;instance&gt;/tfp/&lt;tenant&gt;/<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. Если это не удается, повторно аутентифицируйте пользователя / покажите ему страницу, объясняющую, что ему необходимо снова войти в систему + кнопка для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...