Как создать REST-запрос SharedKeyLite для хранилища таблиц Azure - PullRequest
1 голос
/ 09 июня 2019

Я пытаюсь вызвать Azure Table Storage с помощью Postman, но продолжаю получать:

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

Код, который я использую для сценария предварительного вызова в Postman, выглядит следующим образом:

var storageAccount = "**mystorageaccount**";
var accountKey = "**mystoragekey**";

var date = new Date();
var UTCstring = date.toUTCString();

var data = date + "\n" + "/**mystorageaccount**/**mytable**"

var encodedData = unescape(encodeURIComponent(data));

var hash = CryptoJS.HmacSHA256(encodedData, accountKey);
var signature = hash.toString(CryptoJS.enc.Base64);

var auth = "SharedKeyLite " + storageAccount + ":" + signature;

postman.setEnvironmentVariable("auth", auth);
postman.setEnvironmentVariable("date", UTCstring);

Заголовки в Почтальоне следующие:

Authorization : {{auth}}
date : {{date}}
version : 2015-12-11

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

1 Ответ

0 голосов
/ 09 июня 2019

Причина, по которой вы получаете эту ошибку, заключается в том, что вы не конвертируете ключ своей учетной записи в буфер. Пожалуйста, измените следующую строку кода:

var hash = CryptoJS.HmacSHA256(encodedData, accountKey);

до

var hash = CryptoJS.HmacSHA256(encodedData, Buffer.from(accountKey, 'base64'));

И вы не должны получить ошибку.


UPDATE

Я также получил ту же ошибку. Пожалуйста, попробуйте следующий код:

var storageAccount = "**mystorageaccount**";
var accountKey = "**mystoragekey**";

var date = new Date();
var UTCstring = date.toUTCString();

var data = UTCstring + "\n" + "/**mystorageaccount**/**mytable**"

var encodedData = unescape(encodeURIComponent(data));

var hash = CryptoJS.HmacSHA256(encodedData, CryptoJS.enc.Base64.parse(accountKey));
var signature = hash.toString(CryptoJS.enc.Base64);

var auth = "SharedKeyLite " + storageAccount + ":" + signature;

postman.setEnvironmentVariable("auth", auth);
postman.setEnvironmentVariable("date", UTCstring);

Я только что попробовал приведенный выше код и смог перечислить сущности в моей таблице.

...