У меня есть хранимая процедура Azure, и мне нужно обработать ее сценарием Python, который я собираюсь загрузить в качестве веб-задания, чтобы запланировать его выполнение один раз в день.
Я читалдокументы по выполнению хранимой процедуры , заголовки общих запросов для вызовов покоя Azure Cosmos DB и страница по контроль доступа , но упоминается страница управления доступомчто эти ключи предназначены только для запросов на чтение (поэтому я предполагаю, что они не предназначены для обращения к хранимым процедурам, у которых есть права на выполнение какого-либо запроса или что-то похожее на огромную дыру в уязвимости).
Мне нужно конкретно знать, какполучить ключ из Azure в python для попадания в конечную точку моей хранимой процедуры?
Обновление 1
Наконец-то я смог создать строку авторизации и отправить ее вместе с некоторыми другими заголовками, на сервер.Но я все еще получаю неавторизованный ответ.
Ответ:
{
"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"
}
Заголовки запроса:
{
Authorization: [my-auth-string],
x-ms-version: "2017-02-22", //My DB was created after this, the latest version, so I assume it uses this version; can I verify this somehow?
x-ms-date: "Fri, 05 Oct 2018 19:06:17 GMT", // My js for returning the auth string also returns the date, so I copy both in
Content-Type: application/json
}
Код для генерации строки авторизации, которая затем копируется /вставить в почтальон:
var crypto = require("crypto");
var inputKey = "my-key-from-azure";
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);
}