Маркер Azure Cosmos DB Позвольте мне попасть в конечную точку, но не прошел проверку подлинности - PullRequest
0 голосов
/ 07 октября 2018

Я использую этот код для генерации моего токена.Я только что изменил пример кода для генерации токена, чтобы он также возвращал мне дату, потому что я должен отправить это в запросе.

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 * построен в соответствии с ожидаемым протоколом.

Выполнить хранимую процедуру , Общие заголовки запросов , ДоступКонтроль .Запрос отправляется почтальоном, и я копирую значения, которые мой скрипт генерирует непосредственно в него.Что я делаю не так?

1 Ответ

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

Azure Cosmos DB имеет два типа «ключей».

Мастер-ключи - Используются для административных ресурсов: учетные записи баз данных, базы данных, пользователи и разрешения. Маркеры ресурсов - Используются для ресурсов приложения: контейнеры, документы, вложения, сохраняются.процедуры, триггеры и пользовательские функции

Защита доступа к данным базы данных Azure Cosmos

Предоставляемые вами примеры не соответствуют примерам из документации, таким как: Пример кода для использования мастер-ключа

Что касается использования токенов:

Вы можете использовать токен ресурса (создавая пользователей и полномочия Cosmos DB), когда вы хотитепредоставить доступ к ресурсам в вашей учетной записи Cosmos DB клиенту, которому нельзя доверять с помощью главного ключа.

И я не вижу следующих var TokenVersion = "1.0", необходимых для использования с мастер-токенами и т. Д.

...