Получение ответа об ошибке 401 на запросы к API Apigee

Я пытаюсь делать запросы к API Apigee из службы Angular. Он работает с Postman, но я получаю 401 несанкционированную ошибку при выполнении запросов к API из моего кода Angular.

Вот код Angular, который я пытаюсь:

$http({
       url: "https://xxx_test.com/data?sdate=date",
       method: "GET",
       headers: {
               'apikey': 'XXXXXXXXXXXXXXXXX'                             
             },
     })

Это ответ, который я получаю:

{"fault":{"faultstring":"Не удалось разрешить переменную ключа API request.header.apikey","detail":{"код ошибки":"steps.oauth.v2.FailedToResolveAPIKey"}}}


person sandeep pandey    schedule 16.05.2018    source источник
comment
Вы пытались установить заголовок типа контента? Без него большинство API не будут работать корректно.   -  person Kris    schedule 16.05.2018
comment
попробуйте изменить заголовок на "APIKey" вместо "apikey"   -  person Aleksey Solovey    schedule 16.05.2018
comment
Крис и Алексей Соловей, я попробовал оба предложения, но они не работают. Я не могу понять, как это работает с почтальоном. у тебя есть идеи? Пожалуйста, предложите.   -  person sandeep pandey    schedule 16.05.2018
comment
Пожалуйста, поделитесь журналами консоли и сетевым журналом как есть   -  person manish kumar    schedule 16.05.2018
comment
@manishkumar- Сетевой журнал: {fault:{faultstring:Не удалось разрешить переменную ключа API request.header.apikey,detail:{код ошибки:steps.oauth.v2.FailedToResolveAPIKey}}} Журнал консоли: angular.js:12265 ОПЦИИ apiurl?start_date=04/26/2018&end_date=04/26/2018 401 (Не авторизовано) :3000/#/pos:1 Не удалось загрузить apiurl?start_date= 26.04.2018&end_date=26.04.2018: ответ на предварительную проверку имеет недопустимый код состояния HTTP 401.   -  person sandeep pandey    schedule 16.05.2018


Ответы (2)


Проблема была в конфигурации на стороне сервера. Мы используем apigee для нашего API, поэтому для CORS требуется некоторая настройка.

Вот настройки:

<FaultResponse>
        <Set>
            <StatusCode>200</StatusCode>
            <ReasonPhrase>CORS OK</ReasonPhrase>
            <Headers>
                <Header name="Access-Control-Allow-Methods">GET, POST, PUT, DELETE, PATCH</Header>
                <Header name="Access-Control-Allow-Origin">*</Header>
                <Header name="Access-Control-Allow-Headers">authorization,content-type,api-key</Header>
            </Headers>
            <Payload/>
            <!-- Remove default fault content. -->
        </Set>
    </FaultResponse>

Добавьте политику RaisFault в свой поток с условием.

<Condition>request.verb == "OPTIONS" AND request.header.origin != null AND request.header.Access-Control-Request-Method != null</Condition>
person sandeep pandey    schedule 24.05.2018

Попробуйте этот способ. Также установите заголовок accept.

var config = {headers:  {
        'apikey': 'XXXXXXXXX',
        'Accept': 'application/json;odata=verbose',
    }
};

$http.get("https://xxx_test.com/data?sdate=date", config);
person manish kumar    schedule 16.05.2018
comment
@sandeeppandey, можете ли вы показать заголовки, отправляемые на вкладке сети, вместе с заголовками в почтальоне. - person manish kumar; 16.05.2018