Я внедряю OAuth в моем приложении React / Redux (или другом приложении управления состоянием на основе Flux), и я изо всех сил пытаюсь найти хорошую информацию о "плюсах против" различных методов расширения access_token.
1) Перехватить 401 ответ
Один из вариантов - перехватывать запросы API (например, используя пакет «fetch-intercept») и обнаруживать любые ответы 401 HTTP-кода.
В случае, если мы 401 создаем логику для получения нового access_token, а затем воспроизводим предыдущий запрос.
- Воспроизведение может быть обработано путем отправки действия INVALID_TOKEN в обработчик 401, перехватывая их через промежуточное программное обеспечение, которое затем воспроизведет действие до того, как произойдет действие INVALID_TOKEN.
Плюсы
- Видна полная информация о действиях, связанных с ошибками аутентификации (поэтому мы можем воспроизвести ошибки, связанные с аутентификацией, используя отладку во времени)
2) Обнаружение устаревшего access_token во время вызова API
Другим способом было бы в момент отправки любого запроса декодировать наш access_token и проверить, нужно ли нам его обновить в ближайшее время (и если это так, то сделать).
Опять же, какое-то промежуточное программное обеспечение будет лучшим вариантом для этого решения. Мы могли бы перехватить все действия, и прежде чем отправлять его, сначала проверьте, есть ли у нас действительный токен доступа.
Плюсы
- Не нужно подключаться к серверу, чтобы получить ответ 401, который мы могли бы вместо этого вытеснить
Против
- Более сложная логика для постановки запросов в очередь, пока мы обновляем токен, прежде чем, наконец, воспроизвести их после правильного обновления
3) Метод опроса
При входе в систему посмотрите, сколько времени пройдет до истечения срока действия токена, и установите тайм-аут для обновления access_token непосредственно перед этим
Плюсы
- Самый простой вариант (особенно при модификации приложения с потерей существующей логики запросов)
Будем благодарны за любые дополнительные опции или плюсы и минусы для каждого метода, поэтому, возможно, я смогу создать здесь исчерпывающий список для начинающих