Авторизация API REST сервиса хранилища Azure для таблицы - PullRequest
0 голосов
/ 26 апреля 2018

Я застрял на весь день, вызывая API REST Azure Storage. Ответ показал, что это происходит из-за ошибки аутентификации Azure, но я понятия не имею, в чем проблема. Вы можете проверить подобную проблему здесь также

Авторизация API REST службы хранилища Azure

, используя это, я получил, что блод работал на меня, но не на стол. как этого добиться с помощью таблицы

var apiVersion = '2017-07-29';
var storageAccountName = "MyAccountName";
var key = "MyAccountKey";

var currentDate= new Date();
var strTime = currentDate.toUTCString();
var strToSign = 'GET\n\n\n\nx-ms-date:' + strTime + '\nx-ms-version:' + apiVersion + '\n/' + storageAccountName + '/?restype=service&comp=properties';
var secret = CryptoJS.enc.Base64.parse(key);
var hash = CryptoJS.HmacSHA256(strToSign, secret);
var hashInBase64 = CryptoJS.enc.Base64.stringify(hash);
var auth = "SharedKeyLite " + storageAccountName + ":" + hashInBase64; 
document.write(auth)
$.ajax({
    type: "GET",
    url: "https://MyAccountName.table.core.windows.net/?restype=service&comp=properties&sv=2017-07-29&ss=bqtf&srt=sco&sp=rwdlacup",
    beforeSend: function (request) {
        request.setRequestHeader("Authorization", auth);
        request.setRequestHeader("x-ms-date", strTime);
        request.setRequestHeader("x-ms-version", apiVersion);
    },
    processData: false,
    success: function (msg) {
        // Do something
    },
    error: function (xhr, status, error) {
        // Handle error
    }
});

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

var strToSign = 'GET\n\n\n\nx-ms-date:' + strTime + '\nx-ms-version:' + apiVersion + '\n/' + storageAccountName + '/?comp=list';
url: "https://appcrestdev.blob.core.windows.net/?comp=list",

Ответы [ 2 ]

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

strToSign для проверки подлинности таблицы отличается от значения для BLOB-объекта.

Вы можете изменить две переменные, как показано ниже, и попробовать, это работает на моей стороне.

var strToSign = strTime + '\n/' + storageAccountName + '/?comp=properties';

url: "https://MyAccountName.table.core.windows.net/?restype=service&comp=properties"

А вот несколько ссылок для вас.

0 голосов
/ 27 апреля 2018

Я бы рекомендовал использовать следующий учебник для проверки подлинности, чтобы увидеть, пропустили ли вы шаг: https://www.youtube.com/watch?v=ujzrq8Fg9Gc
Это должно решить ваши проблемы.

Это ссылка на API REST для служб Azure: https://docs.microsoft.com/en-us/rest/api/azure/#register-your-client-application-with-azure-ad

...