У меня возникают некоторые проблемы с потоком аутентификации, который я использую для приложения Angular, которое я создаю.Поток работает, но у меня нет идеи, что он очень стабилен.Я действительно хотел бы показать вам, ребята, поток, и я надеюсь, что у вас есть отзывы для меня.Или, может быть, у вас есть несколько рекомендаций для меня.
Ниже я описал два технических сценария, которые мы реализовали в разных прототипах.У каждого из этих сценариев свой подход.
Сценарий 1
- Запрос запускается с токеном в заголовке
- Внутренняя конечная точка отправляет 401 (неавторизовано), если токен истек
- Есливнешний интерфейс получает, что токен текущего запроса истек, он немедленно запросит новый токен на другой конечной точке refresh_token
- Эта конечная точка refresh_token проверит токен и сгенерирует новый токен, если пользователю разрешено
- Фронт устанавливает логический флаг, чтобы приложение знало, что запрос refresh_token выполняется
- Все другие запросы, которые могут быть отправлены асинхронно, будут удерживаться, если логический флаг == true (итаким образом, ожидая нового токена, чтобы войти).Запросы будут удерживаться в бесконечном цикле (с тайм-аутом) в сочетании с обещаниями.
- Когда поступит новый токен из конечной точки refresh_token, все запросы, которые находятся в режиме ожидания, продолжат свой поток запросов.с измененными заголовками.Если ранее упоминался логический флаг == false, тогда установите новый заголовок токена и дайте запросу продолжить свой поток.Имейте в виду, что запрос не пересылается, а устанавливается в ожидании, а затем велит продолжить его обработку.
- Чтобы перехватить исходящие запросы и установить их в ожидании, выполняется угловой перехватчик
Сценарий 2 Несмотря на то, что сценарий 1 сработал, в нем были некоторые ошибки, которые мы не могли полностью устранить.Некоторые из них были все еще необъяснимы.По этой причине мы создали новый поток токенов обновления (сценарий 2).
- Запрос запускается с токеном в заголовке
- Конечная точка серверной проверки ресурсов, если токен истек (backend) Если токен истек, он возвращает ресурс и вновь сгенерированный токен (скод состояния 200).Старый токен отбрасывается.
- (внешний интерфейс) Все остальные запросы, которые могут быть отправлены асинхронно, будут помещены в очередь запросов.Это делается в отдельном угловом сервисе, а не в угловом перехватчике.Мы сознательно решили использовать службу вместо перехватчика, потому что вам нужно центральное место для сбора всех исходящих запросов
- Когда интерфейс обнаруживает новый сгенерированный токен (из шага 3), он затем повторно отправляет все запросы, которыенакапливаются в очереди запросов
Несмотря на то, что мы достигли некоторого прогресса в решении этой проблемы с маркером обновления, мы решаем эту проблему некоторое время.Мы были бы очень благодарны за отзыв о том, как улучшить ситуацию, или поделились с нами новыми взглядами (каламбур).