Я отлаживаю сценарий в своей производственной среде, где я периодически вижу неожиданные ответы HTTP 401 от моего сервера ресурсов. Я использую Spring Security OAuth2 («старые» библиотеки OAuth; до Spring Security 5.2.x и его реализация OAuth2) для обработки запросов и выполнения Authn.
Я наблюдаю следующее:
- Пользователь входит в систему в момент времени
x
(здесь время в секундах) и получает токен доступа. Срок действия этого токена доступа истекает в моментx + 900
(срок действия 15 минут). - В момент времени
x + 480
пользователь делает запрос к защищенной конечной точке. - Запрос занимает много времени, поэтому он все еще обрабатывается, когда истекает срок действия токена. В момент времени
x + 900
сервер возвращает ответHTTP 401
.
Вопросов:
- Неужели так работает Spring Security OAuth2? Чтобы быть более конкретным, отслеживает ли он время истечения срока действия токена и возвращает 401, если запрос все еще обрабатывается, когда срок действия токена истекает? Или на другом конце фильтра безопасности, когда готовится ответ?
- Есть ли способ отключить это поведение, чтобы токен проверялся только при первой обработке запроса?