Я просто пытался выполнить простую хранимую процедуру CosmosDB из функции Node-RED, используя узел HTTP. Но я получаю сообщение об ошибке "{" code ":" Unauthorized "," message ":" Токен авторизации ввода не может обработать запрос. Пожалуйста, проверьте, что ожидаемая полезная нагрузка построена в соответствии с протоколом, и проверьте используемый ключ. Сервер использовал следующую полезную нагрузку для подписи: 'post \ nsprocs \ ndbs / iot_test / colls / testdata / sprocs / hello \ nfri, 14 февраля 2020 06:29:47 gmt \ n \ n' \ r \ nActivityId: 35a03050-7ab7- 400f-a640-77010ecfe3bb, Microsoft. Azure .Documents.Common / 2.9.2 "}"
Может кто-нибудь, пожалуйста, помогите. Я застрял.
Код моей хранимой процедуры
function hello(name) {
getContext().getResponse().setBody("Hello, "+ name);
}
Функция Node-RED
var crypto = global.get('crypto');
var moment = global.get('moment');
var dateFormat = 'ddd, DD MMM YYYY HH:mm:ss';
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);
}
const verb= 'GET';
const resourceType='docs';
const resourceId='dbs/iot-test/colls/testdata';
const date = moment.utc().format(dateFormat)+" GMT";
const masterKey = 'D9vXtelJ9F6hrKDXP2qlkNgKZzw0XJ6qTtXxmc8Qf7vPkdtdIy5274jaoB5yEkfzHO3sxiRT4KZFbhon5391wQ==';
const databaseaccount = "etcsandpitiotcosmos";
const db_id = "iot_test";
const col_id= "testdata";
const stored_proc = "hello";
msg.dt = date;
msg.method ='POST';
msg.url = "https://"+ databaseaccount +".documents.azure.com/dbs/"+ db_id +"/colls/"+ col_id +"/sprocs/"+stored_proc+"/";
msg.headers = {};
msg.headers['Content-Type']="application/query+json";
msg.headers['x-ms-version'] = '2018-12-31';
msg.headers['x-ms-date'] = date;
msg.headers['Authorization'] = getAuthorizationTokenUsingMasterKey(verb, resourceType, resourceId, date, masterKey);
msg.payload = ["Monty"];
return msg;