Приложение Angular/Breeze, подключающееся к веб-API, выдает ошибку «Отказано в доступе» в IE11

Приложение

Короче говоря, приложение выводит данные из серверной части на веб-страницу. Клиентское приложение представляет собой одностраничное приложение, созданное с использованием AngularJS. Он вызывает службу веб-API ASP.NET, расположенную в другом домене, для получения данных. Я использую BreezeJS как в клиентском приложении, так и в веб-службе для управления этими данными. Клиент размещается на сайте SharePoint Online, а служба размещается на IIS7.

Ошибка

Я сталкиваюсь с ошибкой Access is Denied, когда AngularJS пытается выполнить вызов XMLHttpRequest.open(), нацеленный на эту веб-службу. Однако, хотя это кажется простой проблемой CORS, у нее есть некоторые особенности, которые поставили меня в тупик:

  1. Прежде всего, эта ошибка возникает только при использовании Internet Explorer 11 (или более ранней версии). Когда приложение просматривается в Chrome или Firefox, оно может подключаться и получать данные из службы.

  2. Веб-служба настроена на прием вызывающего источника.

  3. Сетевой трафик не обнаруживается ни собственными инструментами разработки IE, ни Fiddler.

В частности, эта ошибка возникает в строке: xhr.open(method, url, true); файла angular.js.

Кто-нибудь знает, почему возникает эта ошибка?

Кроме того, если нужны более конкретные детали, я, безусловно, могу их предоставить. Я даже не уверен, откуда может возникнуть проблема, и я не хочу выгружать тонны нерелевантных строк кода.


person P. W. Lambert    schedule 21.08.2014    source источник


Ответы (2)


Я думаю, что это связано с использованием «localHost», т.е. при попытке доступа к ресурсу в зоне «Локальная интрасеть» из источника в зоне «Интернет».

См.: Доступ запрещен в IE 10 и 11, когда целью ajax является локальный хост

person Jay Traband    schedule 21.08.2014

Это не просто проблема с локальным хостом, как предполагалось ранее. У меня есть производственное приложение AngularJS, которое пытается отправить POST в общедоступный веб-API 2 в другом домене. IE11, Chrome и Firefox работают без сбоев при доступе к сайту извне. При доступе из подсети, которая может напрямую обращаться к этим серверам, я получаю Access Denied, а IE даже не отправляет запрос (конечно, Chrome и Firefox работают безупречно. Один обходной путь (я отказываюсь называть это исправлением) — добавить сайт в качестве надежного сайта в IE11.Даже когда параметры безопасности для Интернета отражают параметры для надежного сайта, мне отказывают в доступе.Я должен добавить сайт в каждую внутреннюю систему IE, чтобы получить доступ.

person Owen    schedule 21.11.2014
comment
На самом деле наш ИТ-отдел нажал скрипт, чтобы добавить сайт в надежные сайты на всех внутренних машинах. - person Owen; 10.02.2016