Я столкнулся с довольно странной проблемой в IE11, когда браузер переопределяет заголовок авторизации в моих запросах, хотя я устанавливаю его через AngularJS.
По сути, у меня есть HTTP-перехватчик, зарегистрированный для всех запросов, который выглядит так:
AuthInterceptorService.request = function (config) {
config.headers.Authorization = "Bearer " + bearerToken;
}
Это прекрасно работает во всех браузерах (даже в IE при определенных условиях). Мое приложение настроено в IIS как разрешающее анонимную аутентификацию, и у меня отключена базовая/интегрированная аутентификация для этого дочернего сайта, однако в родительской конфигурации включена аутентификация Windows.
Что иногда происходит, так это то, что браузер делает запрос к корневому URL-адресу для статического файла (скажем, /favicon.ico
). Этот запрос отклонен 401. Браузер отвечает согласованной аутентификацией и получает значок значка. На данный момент все другие браузеры по-прежнему позволяют моему коду устанавливать заголовок авторизации, но как только эта интегрированная аутентификация происходит в IE, заголовок авторизации, кажется, застревает - независимо от того, что делает мой код, заголовок авторизации всегда использует встроенную аутентификацию. Это приводит к тому, что все запросы к моему API терпят неудачу, поскольку токен Bearer отсутствует.
Мне удалось обойти проблему с иконкой, указав более локальную иконку (где статические файлы могут обслуживаться анонимно), но мне интересно, есть ли менее хакерское решение этой проблемы. Могу ли я каким-то образом убедить IE разрешить мне установить заголовок авторизации, даже если аутентификация Windows выполнялась по предыдущему запросу?
Примечание. Я нашел этот вопрос, который кажется связанным (возможно, тот же самый базовый причина).