Azure cosmosdb 未强制使用ResourcePartitionKey的CosmosDB UserPermission

Azure cosmosdb 未强制使用ResourcePartitionKey的CosmosDB UserPermission,azure-cosmosdb,azure-cosmosdb-sqlapi,Azure Cosmosdb,Azure Cosmosdb Sqlapi,我试图通过对用户权限的附加ResourcePartitionKey限制来实现本文中描述的行为,以将资源令牌限制为仅访问属于指定分区密钥的文档,但我无法使其工作 使用SQL REST API,我在使用resourcepartitionkey密钥对创建UserPermission对象的POST中没有收到任何错误,初始返回的对象以及后续GET在获取资源令牌时也显示“resourcepartitionkey” 对权限中指定的适当集合使用资源令牌,我可以列出集合中的所有文档。当使用“x-ms-docume

我试图通过对用户权限的附加ResourcePartitionKey限制来实现本文中描述的行为,以将资源令牌限制为仅访问属于指定分区密钥的文档,但我无法使其工作

使用SQL REST API,我在使用resourcepartitionkey密钥对创建UserPermission对象的POST中没有收到任何错误,初始返回的对象以及后续GET在获取资源令牌时也显示“resourcepartitionkey”

对权限中指定的适当集合使用资源令牌,我可以列出集合中的所有文档。当使用“x-ms-documentdb-partitionkey”标题时,我可以针对我喜欢的任何paritionkey。没有“x-ms-documentdb-partitionkey”头,它只返回整个集合

该集合是一个全新的、无限制的1000 RU,分区键为“/rpk”。集合的创建后查询显示分区键,配置如下

"partitionKey": {
    "paths": [
        "\/rpk"
    ],
    "kind": "Hash"
} 
下面是创建过程中返回的用户权限,其中显示了“resourcepartitionkey”


我假设我遗漏了一些明显的内容,或者在UserPermission中为“resourcepartitionkey”使用了不正确的值,但我无法确定是什么。非常感谢您的任何想法。

经过多个小时的尝试和错误,我终于解决了在用户权限的后期创建过程中出现的问题

首先,虽然创建用户权限将验证名称“resourcePartitionKey”,但它不会检查大小写敏感度。敏感度不正确时,返回的UserPermission对象的值存在,但不提供任何安全控制(危险情况#1)

其次,未验证输入值是否为数组类型。它再次在用户权限对象中被接受并返回给您,但同样不提供安全控制(危险情况#2)

下面是一个完整的工作示例,其中权限ID被称为“读取集合”,resourcePartitionKey被配置为“rpk1”,最终显示了请求需要“x-ms-documentdb-partitionkey”的预期行为,并且仅从指定的分区键返回值

POST https://accountname.documents.azure.com/dbs/dbName/users/userName/permissions HTTP/1.1
authorization: type%3dmaster%26ver%3d1.0%26sig<signature>
x-ms-version: 2017-02-22
x-ms-date: Thu, 16 Aug 2018 04:09:44 GMT
User-Agent: Mozilla/5.0 (Windows NT; Windows NT 10.0; en-AU) WindowsPowerShell/5.1.17134.165
Content-Type: application/json
Host: accountname.documents.azure.com
Content-Length: 215

{
    "resource":  "dbs/dbName/colls/collectionName/",
    "id":  "read-collection",
    "resourcePartitionKey":  [
                                 "rpk1"
                             ],
    "permissionMode":  "read"
} 
POSThttps://accountname.documents.azure.com/dbs/dbName/users/userName/permissions HTTP/1.1
授权:类型%3dmaster%26ver%3d1.0%26sig
x-ms-version:2017-02-22
x-ms-date:2018年8月16日星期四04:09:44 GMT
用户代理:Mozilla/5.0(Windows NT;Windows NT 10.0;en-AU)Windows PowerShell/5.1.17134.165
内容类型:application/json
主机:accountname.documents.azure.com
内容长度:215
{
“资源”:“dbs/dbName/colls/collectionName/”,
“id”:“读取集合”,
“resourcePartitionKey”:[
“rpk1”
],
“许可模式”:“读取”
} 
如果有人知道在何处记录CosmosDB SQL Rest API的DCR或bug,请告诉我,因为在创建资源权限期间,如果没有适当的验证,资源令牌可能会分发给低信任客户机,从而获得对收集数据的意外完全访问权

GET https://accountname.documents.azure.com/dbs/dbName/colls/collectionName/docs HTTP/1.1
authorization: type%3dresource%26ver%3d1%26sig<resource token signature>
x-ms-version: 2017-02-22
x-ms-max-item-count: -1
x-ms-date: Wed, 15 Aug 2018 12:11:35 GMT
User-Agent: Mozilla/5.0 (Windows NT; Windows NT 10.0; en-AU) WindowsPowerShell/5.1.17134.165
Content-Type: application/json
Host: accountname.documents.azure.com
{
    "_rid": "lH9FAKbDh4c=",
    "Documents": [
        {
            "id": "blue",
            "rpk": "rpk1",
            "_rid": "lH9FAKbDh4cCAAAAAAAAAA==",
            "_self": "dbs\/lH9FAA==\/colls\/lH9FAKbDh4c=\/docs\/lH9FAKbDh4cCAAAAAAAAAA==\/",
            "_etag": "\"ec012ca1-0000-0000-0000-5b73ab440000\"",
            "_attachments": "attachments\/",
            "_ts": 1534307140
        },
        {
            "id": "red",
            "rpk": "rpk2",
            "_rid": "lH9FAKbDh4cDAAAAAAAAAA==",
            "_self": "dbs\/lH9FAA==\/colls\/lH9FAKbDh4c=\/docs\/lH9FAKbDh4cDAAAAAAAAAA==\/",
            "_etag": "\"ec012da1-0000-0000-0000-5b73ab580000\"",
            "_attachments": "attachments\/",
            "_ts": 1534307160
        }
    ],
    "_count": 2
}
POST https://accountname.documents.azure.com/dbs/dbName/users/userName/permissions HTTP/1.1
authorization: type%3dmaster%26ver%3d1.0%26sig<signature>
x-ms-version: 2017-02-22
x-ms-date: Thu, 16 Aug 2018 04:09:44 GMT
User-Agent: Mozilla/5.0 (Windows NT; Windows NT 10.0; en-AU) WindowsPowerShell/5.1.17134.165
Content-Type: application/json
Host: accountname.documents.azure.com
Content-Length: 215

{
    "resource":  "dbs/dbName/colls/collectionName/",
    "id":  "read-collection",
    "resourcePartitionKey":  [
                                 "rpk1"
                             ],
    "permissionMode":  "read"
}