Firefox блокирует простой CORS-запрос на изменение / олицетворение ASP.NET Identity - PullRequest
0 голосов
/ 13 октября 2018

Я работаю над проектом с некоторыми коллегами, использующими ASP MVC 5, и мы используем много общих библиотек Javascript из общедоступных CDN.Я настроил и включил CORS, и все работает отлично, за исключением этого конкретного случая, и мы несколько озадачены на этом этапе.

Приложение использует ASP.NET Identity 2, а некоторые функции зависят от функции олицетворения.Базовая реализация, как правило, следует следующим ответам: Как использовать ASP.NET Identity 2.0, чтобы позволить пользователю выдавать себя за другого пользователя?

Интерфейс использует запись AJAX с токенами защиты от подделки дляКонечная точка WebAPI (после этой конкретной реализации: https://stackoverflow.com/a/24394578/5330050). Чтобы новый идентификатор вступил в силу, приложение выполняет window.location.reload(true);.

Именно в этот момент Firefox блокирует все запросы CORS (всеиз них запросы на библиотеки и платформы, размещенные на CDN). Это конкретная ошибка (одинаковая для всех запросов, разные библиотеки, один и тот же домен):

Блокировка перекрестного запроса: То жеПолитика происхождения запрещает чтение удаленного ресурса на https://cdnjs.cloudflare.com/{some.js}. (причина: запрос CORS не был выполнен)

Эта проблема возникает только в Firefox. И она продолжает блокировать эти ресурсы, даже если я пытаюсьперейдите на другую страницу в приложении. Если я не очистил кеш (но не куки, чтобы личность все еще сохранялась), то накануневсе в порядке снова.

Нет ничего особенного в том, как называются эти ресурсы.Это не запрос POST.Это просто там, в <head>, например:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>

Вещи, которые работают, чтобы решить его (но неприемлемо, поскольку пользовательский опыт обеспокоен)

  1. Очистить кеш (но не куки)

  2. Подождите 5 минут (чтобы забыть Firefox? Сеанс на сервере установлен на 12 часов)

Я действительно не знаю, в чем причина, и я ценю любую помощь в поиске обходного пути или подсказки относительно того, где я мог бы найти решение.

1 Ответ

0 голосов
/ 31 декабря 2018

Это не совсем ответ, но я конкретно выяснил, что происходит с моим делом выше.У меня есть дополнительный вопрос, но перед этим я поделюсь тем, что нашел:

https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Requests_with_credentials

При ответе на запрос с полномочиями сервер должен указать источник в значениизаголовка Access-Control-Allow-Origin вместо указания подстановочного знака "*".

Поскольку заголовки запроса в приведенном выше примере включают заголовок Cookie, запрос завершится ошибкой, если значение Access-Control-Allow-Origin заголовок был "*".Но это не дает сбоя: поскольку значение заголовка Access-Control-Allow-Origin равно "http://foo.example" (фактическое происхождение), а не подстановочному знаку "*", контент с удостоверением личности возвращается в вызывающий веб-контент.

Обратите внимание, что заголовок ответа Set-Cookie в приведенном выше примере также устанавливает дополнительный файл cookie. В случае сбоя возникает исключение - в зависимости от используемого API.

Thisэто именно то, что происходит, потому что эта проблема не возникает, пока пользователь не вошел в систему. cdnjs (или любой другой CDN там) будет отправлять подстановочный заголовок, потому что это стандарт, как это делается.

I 'Я все еще не понимаю, почему это происходит с тегом script, поэтому мой следующий вопрос будет в том же духе.

...