Я застрял весь день, сделав свой первый вызов API REST Azure Storage. Ответ Postman показал, что это связано с ошибкой в аутентификации Azure, но я не знаю, в чем проблема.Авторизация службы хранения Azure REST API
Вот браузер скрипт для отправки Azure Storage REST API:
function azureListContainers() {
var key = "key-copied-from-azure-storage-account";
var strTime = (new Date()).toUTCString();
var strToSign = 'GET\n\n\n\nx-ms-date:' + strTime + '\nx-ms-version:2015-12-11\n/myaccount/?comp=list';
var hash = CryptoJS.HmacSHA256(strToSign, key);
var hashInBase64 = CryptoJS.enc.Base64.stringify(hash);
var auth = "SharedKeyLite myaccount:"+hashInBase64;
console.log(strToSign);
console.log(auth);
console.log(strTime);
$.ajax({
type: "GET",
beforeSend: function (request)
{
request.setRequestHeader("Authorization", auth);
request.setRequestHeader("x-ms-date", strTime);
request.setRequestHeader("x-ms-version", "2015-12-11");
},
url: "https://myaccount.blob.core.windows.net/?comp=list",
processData: false,
success: function(msg) {
console.log(msg);
}
});
}
Chrome Developer Tool только что вернулся Нет 'Access-Control-Allow-Origin' заголовок без дополнительной причины, поэтому я скопировал содержимое var auth
и var strTime
, создали тот же запрос, используя Почтальон инструмент:
[Command]
GET https://myaccount.blob.core.windows.net/?comp=list
[Headers]
Authorization:SharedKeyLite myaccount:Z9/kY/D+osJHHz3is+8yJRqhj09VUlr5n+PlePUa8Lk=
x-ms-date:Tue, 09 Aug 2016 10:30:49 GMT
x-ms-version:2015-12-11
[Response Body]
<?xml version="1.0" encoding="utf-8"?>
<Error>
<Code>AuthenticationFailed</Code>
<Message>Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.
RequestId:9be3d595-0001-0012-4929-f2fde2000000
Time:2016-08-09T10:31:52.6542965Z</Message>
<AuthenticationErrorDetail>The MAC signature found in the HTTP request 'Z9/kY/D+osJHHz3is+8yJRqhj09VUlr5n+PlePUa8Lk=' is not the same as any computed signature. Server used following string to sign: 'GET
x-ms-date:Tue, 09 Aug 2016 10:30:49 GMT
x-ms-version:2015-12-11
/myaccount/?comp=list'.</AuthenticationErrorDetail>
</Error>
После дифф двух строк, я считаю var strToSign
в моем сценарии такое же, как строка Azure используется для подписания. Но все же произошла ошибка аутентификации. Пожалуйста, помогите указать, в чем проблема.
Спасибо, что спасли мне жизнь, Гэри! Как noob и пришел непосредственно из [этого документа аутентификации] (https://msdn.microsoft.com/en-us/library/azure/dd179428.aspx), я не знал, что сначала необходимо сначала декодировать ключ base64. Если возможно, добавьте образец кода в документ для других, чтобы быстро начать. :-) – Ernie
BTW, SharedKeyLite также работает! – Ernie
Рад это услышать. –