我正在使用此代码生成我的令牌。我刚刚更改了用于生成令牌的示例代码,也将日期返回给我,因为我必须在请求中发送它。
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"
}
据我从文档中得知,有效载荷是根据预期的协议构建的。