Я использую этот код для генерации моего токена.Я только что изменил пример кода для генерации токена, чтобы он также возвращал мне дату, потому что я должен отправить это в запросе.
var crypto = require("crypto");
var inputKey = "my-key-from-azure"; // Have tried both primary and secondary master keys from cosmos db
var today = new Date().toUTCString();
console.log(today);
console.log(getAuthorizationTokenUsingMasterKey("POST", "dbs", "dbs/ToDoList", today, inputKey))
function getAuthorizationTokenUsingMasterKey(verb, resourceType, resourceId, date, masterKey)
{
var key = new Buffer(masterKey, "base64");
var text = (verb || "").toLowerCase() + "\n" +
(resourceType || "").toLowerCase() + "\n" +
(resourceId || "") + "\n" +
date.toLowerCase() + "\n" +
"" + "\n";
var body = new Buffer(text, "utf8");
var signature = crypto.createHmac("sha256", key).update(body).digest("base64");
var MasterToken = "master";
var TokenVersion = "1.0";
return encodeURIComponent("type=" + MasterToken + "&ver=" + TokenVersion + "&sig=" + signature);
}
Вот заголовки запроса.Для x-ms-date моя БД была создана после этой последней версии, поэтому я предполагаю, что она использует эту версию;я могу как-то это проверить?
{
Authorization: [my-auth-string],
x-ms-version: "2017-02-22",
x-ms-date: "Fri, 05 Oct 2018 19:06:17 GMT",
Content-Type: application/json
}
Но я получаю сообщение об ошибке, в котором жалуется на действительность моего токена.
{
"code": "Unauthorized",
"message": "The input authorization token can't serve the request. Please check that the expected payload is built as per the protocol, and check the key being used. Server used the following payload to sign: 'post\nsprocs\ndbs/metrics/colls/LoungeVisits/sprocs/calculateAverage\nfri, 05 oct 2018 19:06:17 gmt\n\n'\r\nActivityId: 41cd36af-ad0e-40c3-84c8-761ebd14bf6d, Microsoft.Azure.Documents.Common/2.1.0.0"
}
Полезная нагрузка была *Насколько я могу судить из документов, 1011 * построен в соответствии с ожидаемым протоколом.
Выполнить хранимую процедуру , Общие заголовки запросов , ДоступКонтроль .Запрос отправляется почтальоном, и я копирую значения, которые мой скрипт генерирует непосредственно в него.Что я делаю не так?