Когда Spring Security OAuth2 проверяет истечение срока действия токена доступа?

Я отлаживаю сценарий в своей производственной среде, где я периодически вижу неожиданные ответы HTTP 401 от моего сервера ресурсов. Я использую Spring Security OAuth2 («старые» библиотеки OAuth; до Spring Security 5.2.x и его реализация OAuth2) для обработки запросов и выполнения Authn.

Я наблюдаю следующее:

  1. Пользователь входит в систему в момент времени x (здесь время в секундах) и получает токен доступа. Срок действия этого токена доступа истекает в момент x + 900 (срок действия 15 минут).
  2. В момент времени x + 480 пользователь делает запрос к защищенной конечной точке.
  3. Запрос занимает много времени, поэтому он все еще обрабатывается, когда истекает срок действия токена. В момент времени x + 900 сервер возвращает ответ HTTP 401.

Вопросов:

  1. Неужели так работает Spring Security OAuth2? Чтобы быть более конкретным, отслеживает ли он время истечения срока действия токена и возвращает 401, если запрос все еще обрабатывается, когда срок действия токена истекает? Или на другом конце фильтра безопасности, когда готовится ответ?
  2. Есть ли способ отключить это поведение, чтобы токен проверялся только при первой обработке запроса?

person Mark    schedule 04.05.2020    source источник


Ответы (1)


Я посмотрел исходный код для spring-security-oauth2, и он работает не так. Срок действия токена проверяется только один раз, в начале обработки запроса.

Я проследил проблему, с которой столкнулся выше, до проблемы, при которой ресурсы нашего сервера были исчерпаны на определенный период. Когда ресурсы (ЦП; рабочие потоки HTTP-запроса) стали доступны, сервер начал обрабатывать запрос, но к этому времени токен истек.

person Mark    schedule 04.05.2020