Я понимаю, что поток для использования OAuth2:
после истечения срока действия недействительного токена доступа (сервер возвращает 401), клиент должен запросить новый, используя токен обновления.
Чтобы реализовать его в приложении для iOS (с AFNetworking) или Android (с Volley), я полагаю, что сетевой менеджер должен быть в состоянии обнаружить возвращенную ошибку 401 и затем отправить запрос серверу авторизации.
Проблема связана с одновременным использованием сети. Рассмотрим сценарий, когда доступ истек, приложение отправляет 2 запроса: req1 и через 100 мс req2. Нарисовано на временной шкале, это выглядит так:
req1 --> 401 --> (refresh req) --> OK, new access and fresh tokens --> retry req1
req2 --> 401 --> (refresh req) --> 403, wrong refresh token
Окончательный результат - req2 завершится ошибкой, и приложение выйдет из системы из-за ошибки 403.
Так что мои вопросы
Эта реализация движется в правильном направлении? Или неправильно получать после получения 401? Должен ли я вместо этого обновить токен, когда пользователь запускает приложение (за счет замедления запуска приложения)
Как я могу решить проблему параллелизма?