Информация аутентификации не указана в правильном формате. Проверьте значение заголовка авторизации в Azure Ratecard Apis. - PullRequest
0 голосов
/ 25 апреля 2018

Чтобы получить прейскурант, я использую API ниже.

https://management.azure.com/subscriptions/{subscription-id}/providers/Microsoft.Commerce/RateCard?api-version=2015-06-01-preview&$filter=OfferDurableId+eq+{offer-id}+and+Currency+eq+'USD'+and+Locale+eq+'en-US'+and+RegionInfo+eq+'IN'

Я передавал заголовок авторизации со значением "Bearer eyioe ..." в запросе.Он работал раньше, но недавно получил ответ ниже

<?xml version="1.0" encoding="utf-8"?>
<Error>
    <Code>InvalidAuthenticationInfo</Code>
    <Message>Authentication information is not given in the correct format. Check the value of Authorization header.
RequestId:5dc4ea49-b01e-00f9-6760-dcfb83000000
Time:2018-04-25T06:42:45.8106146Z</Message>
</Error>

1 Ответ

0 голосов
/ 01 мая 2018

Вероятно, дело в том, что RateCard API отправляет обратно перенаправление 302.Это изменилось в новой версии во время этого вопроса.

Рекомендуемый способ исправить это:

  1. Получить токен носителя,
  2. Сделать запрос к ARM с заголовком аутентификации, установленным на токен носителя (этокак и раньше)
  3. RateCard вернет код состояния 302, который представляет собой перенаправление и содержит второй URL-адрес, с которого следует получить карту оценки (это новое).
  4. Необходимо сделать второй запросна второй URL.Обратите внимание, что многие библиотеки http автоматически следуют за перенаправлением и делают второй запрос для вас.При выполнении второго запроса необходимо удалить заголовок авторизации, содержащий маркер канала-носителя, в противном случае вы увидите ошибку.Как это будет реализовано в вашем коде, будет зависеть от того, какой http-клиент вы используете.Для C # код выглядит следующим образом:

const string subId = "Subscription Id here";
const string token = "Auth Token here.";

const string offer = "MS-AZR-0003P";
const string currency = "USD";
const string locale = "en-US";
const string region = "US";

using (var rateCardClient = new HttpClient() { BaseAddress = new Uri("https://management.azure.com/") })
{
    rateCardClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", token);
    var response = await rateCardClient.GetAsync($"subscriptions/{subId}/providers/Microsoft.Commerce/RateCard?api-version=2016-08-31-preview&$filter=OfferDurableId eq '{offer}' and Currency eq '{currency}' and Locale eq '{locale}' and RegionInfo eq '{region}'");

    Console.WriteLine($"StatusCode:{response.StatusCode}");
    var ratecard = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

    Console.Write(ratecard);
}

Для получения дополнительной информации см. Эту страницу выпуска Github: https://github.com/MicrosoftDocs/azure-docs/issues/7423

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...