ADAL — JavaScript, используемый в приложении Angular JS в SPA, для вызова сторонних API, предоставляемых через APIGEE, с ошибкой CORS.

Я создал SPA и использовал Azure AD для хранилища пользователей и библиотеку ADAL-JavaScript, как указано в http://www.cloudidentity.com/blog/2014/10/28/adal-javascript-and-angularjs-deep-dive/ для интеграции с мой угловой js-код. Проверка подлинности прошла успешно, но когда я вызывал сторонний API, открытый с помощью APIGEE, я получал следующие сообщения об ошибках:

Не удалось загрузить ресурс: сервер ответил со статусом 502 (неверный шлюз)

XMLHttpRequest не может загрузить http://webapiexposedusingapigee. В запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». Таким образом, доступ к источнику 'http://mywebsite.in' запрещен. Ответ имел код состояния HTTP 502.

Когда я проверил в Fiddler, я получил следующую строку ошибки. "faultstring=Получен ответ 405 без разрешающего заголовка"

и предупреждение как:

Запросы между источниками заблокированы: политика того же источника запрещает чтение удаленного ресурса по адресу http://test.apigee.net/v1/selectop/myapi. Это можно исправить, переместив ресурс в тот же домен или включив CORS.

Я добавил следующие заголовки в APIGEE:

 <Header name="Access-Control-Allow-Origin">*</Header>
            <Header name="Access-Control-Allow-Credentials">true</Header>
            <Header name="Access-Control-Allow-Headers">Origin, X-Requested-With, Content-Type, Accept</Header>
            <Header name="Access-Control-Max-Age">3628800</Header>
            <Header name="Access-Control-Allow-Methods">GET, PUT, POST, DELETE, OPTION</Header>

Любая помощь в этом приветствуется.

Спасибо.


person user3886523    schedule 29.01.2015    source источник


Ответы (1)


Если у вас есть правильная настройка CORS в конечной точке WebAPI, запрос будет принят. Я не знаком с APIGEE, но по этой ссылке перечислены шаги для включения:http://apigee.com/docs/api-services/content/adding-cors-support-api-proxy.

Вам нужно указать использовать xdomain для отправки заголовков в angular js:

app.factory('contactService', ['$http', function ($http) {
var serviceFactory = {};

var _getItems = function () {
    $http.defaults.useXDomain = true;
    delete $http.defaults.headers.common['X-Requested-With'];
    return $http.get('http://adaljscors.azurewebsites.net/api/contacts');
};

serviceFactory.getItems = _getItems;

return serviceFactory;

}]);

person Omer Cansizoglu    schedule 30.01.2015