CosmosDB ReadOnly Keys引发授权错误

时间:2018-03-03 07:10:00

标签: azure stored-procedures azure-cosmosdb

我尝试使用以下代码使用CosmosDb collectionPrimary Key来阅读Primary Read Only Key中的文档。

    DocumentClient _documentRUClient = new DocumentClient(new Uri(EndPointURI), PrimaryKey);
    DocumentClient _documentRClient = new DocumentClient(new Uri(EndPointURI), 
                                                          ReadOnly_PrimaryKey);

    var result = _documentRUClient.CreateDocumentQuery<T>
                (UriFactory.CreateDocumentCollectionUri(DataBaseId, CollectionId), 
                new FeedOptions() { EnableCrossPartitionQuery = true}).AsEnumerable().ToList();

    var result2 = _documentRClient.CreateDocumentQuery<T>
                (UriFactory.CreateDocumentCollectionUri(DataBaseId, CollectionId), 
                new FeedOptions() { EnableCrossPartitionQuery = true}).AsEnumerable().ToList();

使用DocumentClient的{​​{1}}检索Cosmos DB集合中的文档没有任何问题。但是使用Primary Key的那个会引发以下错误。

  

输入授权令牌无法提供请求。请检查   根据协议构建预期的有效负载,并检查   正在使用的密钥。服务器使用以下有效负载进行签名:&#39; get

     

sat,03 mar 2018 06:47:04 gmt

     

&#39; ActivityId:d57786a0-f7a0-46e9-9375-d5251b81b1e3,   Microsoft.Azure.Documents.Common / 1.20.108.4,   documentdb-dotnet-sdk / 1.20.2主机/ 64位   MicrosoftWindowsNT / 10.0.16299.0

如何克服这个问题?

1 个答案:

答案 0 :(得分:1)

当我设置了错误的只读键时,我重现了你的问题。

示例代码:

using Microsoft.Azure.Documents.Client;
using System;
using System.Linq;

namespace ConsoleApp2
{
    class Program
    {
        private static DocumentClient client;

        static string endpoint = "https://***.documents.azure.com:443/";

        static string key1 = "***";

        static string DataBaseId = "db";
        static string CollectionId = "coll";

        static void Main(string[] args)
        {
            client = new DocumentClient(new Uri(endpoint), key1);

            var result = client.CreateDocumentQuery
                (UriFactory.CreateDocumentCollectionUri(DataBaseId, CollectionId),
                new FeedOptions() { EnableCrossPartitionQuery = true }).AsEnumerable().ToList();

            Console.WriteLine("aaa");

            Console.ReadLine();
        }
    }
}

返回消息:

enter image description here

我建议您通过Fiddler捕获消息并检查您的只读密钥是否正确。

希望它对你有所帮助。