401 с действительным токеном медведя, что может пойти не так?

Что я должен изучить, чтобы выяснить/отследить проблему, подобную этой:

У нас есть приложение Angular, вызывающее .Net Core Web API с включенным CORS, и оно проходит аутентификацию через Azure AD, получая токен Bearer. С токеном Bearer время от времени вызовы API завершаются с ошибкой 401 Unauthorized, иногда — 200. Тем не менее, я помещаю один и тот же токен Bearer в любой клиент REST, и вызовы API всегда работают.

Очень ценю любой вклад.

Еще немного контекста/анализа:

  • API отлично работает с другими приложениями. Поэтому, если проблема на стороне сервера, это не часто выполняемая часть кода. Проблема может быть в клиентском коде Angular.
  • Это приложение Angular — единственное приложение, использующее CORS. Это, очевидно, то, что я изучаю.

  • Локальный сервер разработки (сервер разработки Webpack) и сервер развертывания (IIS) для этого приложения Angular отличаются, но дают один и тот же результат, поэтому это может быть не проблема с конфигурацией сервера.

  • Сравнивая ответ 200 с запросом 401, я вижу, что токен Bearer работает на обоих.
  • Сравнивая ответ 200 с ответом 401, я вижу, что CORS заголовка работает с обоими.
  • Поскольку он дает 401 и, похоже, на самом деле не поступает в веб-API, это связано с аутентификацией. Но я мало что знаю об этом процессе. Любое понимание?

person James Sun    schedule 28.08.2017    source источник
comment
Было бы полезно, если бы вы могли опубликовать заголовки запроса и ответа как из запроса, который получил 200, так и из запроса, который получил 401. Это не обязательно ошибка аутентификации - это может быть CORS. Сбой CORS приведет к ошибке 401.   -  person GreyBeardedGeek    schedule 29.08.2017


Ответы (1)


Я понял. Состояние гонки. Токен на предъявителя еще недоступен там, когда он пытается его получить. К тому времени, когда я вручную выполняю вызов API в клиенте REST, токен доступен. Только если бы у меня были последующие вызовы API независимо от первого, я бы быстрее определил эту проблему.

Простой тайм-аут продемонстрирует, что это работает.

Мы оптимизируем хранилище токенов Bearer и некоторое управление кешем для постоянного решения.

person James Sun    schedule 29.08.2017