Как я могу получить токен, который мне нужен для моего скрипта, чтобы выполнить мою хранимую процедуру Azure? - PullRequest
0 голосов
/ 05 октября 2018

У меня есть хранимая процедура 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);  
} 

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Azure cosmos DB имеет python SDK , который является рекомендуемым и поддерживаемым способом для таких сценариев.

Также код Python SDK является открытым исходным кодом.Вот ссылка на код создания заголовка аутентификации введите описание ссылки здесь

0 голосов
/ 05 октября 2018

Страница о заголовках авторизации предназначена для любого запроса REST Cosmos DB: запроса, хранимых процедур и т. Д.

...