Как отправить запрос в REST API Azure Table с помощью Почтальона - PullRequest
0 голосов
/ 01 ноября 2019

Я пытаюсь сделать запрос GET к API REST Azure Table с помощью Postman. Я могу сделать рабочий запрос с помощью программы на C #, которую я нашел, но когда я пытаюсь скопировать ту же информацию в запрос почтальона, он возвращает ошибку:

Серверу не удалось аутентифицировать запрос. Убедитесь, что значение заголовка авторизации сформировано правильно, включая подпись.

С помощью программы на C # я генерирую время UTC и код авторизации. Программа выдаст мне следующий вывод:

x-ms-date: пт, 01 ноября 2019 10:13:26 GMT

Авторизация: SharedKeyLite username: e4IREMOVEDSOMELETTERST4Ag =

Запрос URI: https://username.table.core.windows.net/MainTable(PartitionKey='akey',RowKey='130')

Сгенерированный вывод работает в программе C #, потому что, когда я использую:

    result = await Client.GetAsync(requestUri);

Результат даст мне информацию о (akey, 130) . Когда я передам их почтальону, это все равно выдаст мне ошибку. Я делаю обновлять дату в почтальоне всякий раз, когда я создаю новую авторизованную строку.

Мои настройки почтальона следующие: postman

Я в конечном итоге хочу сделать этот запросс ESP32, так что это может быть немного не связано, но ESP дает мне ту же ошибку. Будем благодарны за любые советы по правильной настройке заголовков для Postman или ESP.

Ответы [ 2 ]

1 голос
/ 01 ноября 2019

, чтобы заставить эту работу сначала создать две переменные в вашей среде:

{{utcDate}}
{{authToken}}

Затем создайте новый запрос Get и настройте свои заголовки следующим образом:

x-ms-version             2015-12-11

x-ms-data                {{utcDate}}

Authorization            SharedKey resourceName:{{authToken}}

DataServiceVersion       3.0;NetFx

MaxDataServiceVersion    3.0;NetFx

Accept                   application/json;odata=nometadata

Наконец, определитеСценарий предварительного запроса:

var now = new Date().toUTCString();
pm.environment.set("utcDate", now);
var hcar = "/resourceName/TableName";
var verb = request.method;
var cntMd5 = "";
var cntType = "";
var mKey="<Your service key goes here>";

var text = verb + "\n" + (cntMd5 || "") + "\n" + (cntType || "") + "\n" + now + "\n" + hcar;

var key = CryptoJS.enc.Base64.parse(mKey);
var signature = CryptoJS.HmacSHA256(text, key);
var base64Bits = CryptoJS.enc.Base64.stringify(signature);
pm.environment.set("authToken", base64Bits);

Причиной для переменных является authToken, так как вам нужен заполнитель для хранения вычисленного токена, utcDate, поскольку для вычисления вашего токена должна использоваться та же дата в заголовке.

Счастливого программирования !!

0 голосов
/ 01 ноября 2019

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

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