Как получить срок действия тихого токена в Oidc-Client

У меня есть разработанное SPA приложение, в котором я использовал Oidc-Client для аутентификации OAUTH, и ниже приведены пояснения.

  1. Как настроить страницу тихого обновления с файлом конфигурации веб-пакета в проекте на основе структуры angular, поскольку silent-refresh.html не вызывается по истечении срока действия токена.
  2. Даже если токен сгенерирован тихо, то как получить / установить время истечения срока действия токена, сгенерированного без вывода сообщений?

Пожалуйста, помогите и предложите.


person Muruga ananth    schedule 25.08.2020    source источник


Ответы (2)


БЕСШУМНОЕ ОБНОВЛЕНИЕ

Я предпочитаю обрабатывать это не отдельной HTML-страницей, а с помощью молчаливого ответа на обновление токена на странице index.html. Затем напишите такой код:

if (window.top === window.self) {

    // Run the main app
    const app = new App();
    app.execute();

} else {

    // If our SPA is running on an iframe, handle token renewal responses
    const app = new IFrameApp();
    app.execute();
}

Я считаю, что такой подход позволяет избежать усложнения системы WebPack / сборки. Код для приложения iframe делает очень немногое, кроме получения ответа на молчаливое обновление токена.

СРОК СРОКА

Интересно, почему вы хотите напрямую использовать время истечения срока действия токена доступа. Вы можете получить такое значение:

const user = await this._userManager.getUser();
if (user) {
  console.log(user.expires_at);
}

Настоящее требование здесь - убедиться, что вы избегаете ошибок для конечных пользователей, когда вызов API терпит неудачу из-за истекшего токена доступа. Лучше всего с этим справиться с помощью следующих действий:

  • Если вызов API завершился неудачно с кодом состояния 401
  • Затем попробуйте получить новый токен доступа, обычно через userManager.signInSilent ()
  • Затем повторите вызов API с новым токеном доступа.

Поэтому способ вызова API должен иметь вспомогательный класс с некоторой логикой повтора, как в моем примере здесь.

person Gary Archer    schedule 25.08.2020
comment
Спасибо Гэри за быстрый ответ. И expires_at токена тихого обновления, который установлен на основе времени жизни токена восстановления конфигурации idsrv? - person Muruga ananth; 26.08.2020
comment
Это поле получает только время жизни токена доступа, а не общее время сеанса. Один из вариантов может заключаться в том, чтобы прочитать утверждение user.profile.exp, которое представляет собой время истечения срока действия токена идентификатора, и посмотреть, дает ли это вам необходимое значение. - person Gary Archer; 26.08.2020
comment
Нет, Гэри, согласно нашему требованию, мы смогли получить время истечения срока действия токена доступа, но после создания тихого токена, как получить время истечения срока действия автоматически сгенерированного токена, такого как токен обновления ... - person Muruga ananth; 26.08.2020
comment
Правильно - в стандартах OAuth нет ничего, что могло бы дать клиенту время истечения срока действия токена обновления. Итак, то, что вы пытаетесь сделать, не поддерживается технологией. Если вы можете объяснить, почему вам нужна эта ценность, я могу предложить альтернативу, которая отвечает тем же целям. - person Gary Archer; 26.08.2020
comment
Да, Гэри. Наше требование состоит в том, как выйти из тайм-аута автоматически сгенерированного токена, если пользователь не выполняет никаких действий дольше времени / дней? - person Muruga ananth; 27.08.2020
comment
Первоначально после одного часа мы генерируем тихий токен на основе токена доступа expires_in. То же самое, как можно отображать сообщения о тайм-ауте на основе действительности токена silet, который необходимо проверить. - person Muruga ananth; 27.08.2020
comment
Похоже, ваше требование - надежно обрабатывать истечение срока, чтобы избежать ошибок для конечных пользователей, например, если они оставляют свой браузер работающим на ночь. Стандартный способ сделать это - разрешить возникновение ошибок истечения срока действия, а затем обработать их в клиенте. Обратите внимание, что существует несколько причин, по которым токены могут не работать в дополнение к истечению срока действия, например, отзыв, обновление сертификата для подписи токена. Попробуйте запустить мой Online SPA и используйте кнопки истечения срока действия - и дайте мне знать, если это поведение работает на вас. - person Gary Archer; 27.08.2020

Чтобы получать уведомления после автоматического обновления, добавьте обработчик событий для userLoaded: UserManager.events.addUserLoaded. Это передаст новому пользователю новое время истечения срока действия.

person Nelis    schedule 14.07.2021