Почему я все еще могу запросить токен доступа, если срок действия токена обновления истек?

У меня вопрос по токенам обновления. Я настроил свой Angular Client на Identity Server следующим образом:

RefreshTokenUsage = TokenUsage.OneTimeOnly,
AccessTokenLifetime = 30,
AbsoluteRefreshTokenLifetime = 3600,
RefreshTokenExpiration = TokenExpiration.Sliding,
SlidingRefreshTokenLifetime = 60,

Кроме того, мой клиент Angular использует механизм "тихого обновления" (с использованием angular-auth-oidc-client).

Если клиент Angular запущен, через 20 секунд срабатывает "тихое обновление" и запрашивает новый токен доступа, что имеет смысл, потому что это около 75% времени жизни токена доступа в 30 секунд). Он получает новый токен доступа, и все продолжает работать.

В определенный момент я останавливаю беззвучное обновление. Это означает, что он больше не обновляет токен доступа, и действительно, через некоторое время мои вызовы веб-api терпят неудачу, потому что токен доступа истек.

Теперь, через несколько минут, я перезапускаю "тихое обновление".

Странно то, что ему удается получить новый токен доступа, но я так понимаю, что это больше не должно работать, потому что токен обновления должен был истечь через 60 секунд?

Я, вероятно, неправильно понимаю, как работает этот механизм скользящего токена обновления... может кто-нибудь объяснить, почему я все еще могу запросить новый токен доступа с токеном обновления, срок действия которого истек?

1 ответ

Недавно мы реализовали автоматическое обновление с использованием библиотеки oidc из angular SPA.

И я понимаю, что механизм тихого обновления клиентской библиотеки не использует стратегию токена обновления, вместо этого он вызывает запрос авторизации с prompt=none каждый раз, когда он запрашивает автоматическое обновление и получает новый токен идентификатора и токен доступа.

А также он использует управление сеансом OIDC с использованием Iframe для отслеживания истечения срока действия сеанса. Вы можете увидеть этот файл cookie в браузере.

Другие вопросы по тегам