我创建了一个创建用户和权限的中间件,并按照this article中的描述为我的客户端提供令牌。
但是,我没有成功使用令牌连接到我的azure数据库。我已经尝试使用令牌作为普通String
和完全IList<Permission>
用户在相应DocumentClient constructors中的权限。
以下是我的用户权限:
{
"_rid": "vPAMAAVaBgA=",
"Permissions": [
{
"permissionMode": "All",
"resource": "dbs/vPAMAA==/colls/vPAMAO7LQQA=/",
"id": "service.dataPK",
"_rid": "vPAMAAVaBgBk3LOBwSFjAA==",
"_self": "dbs/vPAMAA==/users/vPAMAAVaBgA=/permissions/vPAMAAVaBgBk3LOBwSFjAA==/",
"_etag": "\"00001c00-0000-0000-0000-5aa58bba0000\"",
"_ts": 1520798650,
"_token": "type=resource&ver=1&sig=6Dr2xKx660ZVcCO2mBbigQ==;Pl2S/djma1b8CjrmBeiIKzu4bhUgXLzaf9heZeK2UjAPihO9PfGLItQYLMt64TROG5b9H974WHhdT4L8oDREdpjA674MY/dMBqoT3AI7GkfKU/5/+HurJGRAHnwUoHlxjvasO7vsWtLln1tWlQlZSypcmF/Qey8QM+PIdJVsBWxDr2tJLW5GXCZ5BO3cFTP28qjOJ54wY7H2rxb9tqPywfnEWd27E7WtWlbqeoaOPTJX7yjFdmaaULOgIIHXq8dJ;"
}
],
"_count": 1
}
我在_token
构造函数中使用DocumentClient
。 这是正确的吗?
这是我想要访问的集合:
{
"id": "service.data",
"indexingPolicy": {
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*",
"indexes": [
{
"kind": "Range",
"dataType": "Number",
"precision": -1
},
{
"kind": "Range",
"dataType": "String",
"precision": -1
},
{
"kind": "Spatial",
"dataType": "Point"
}
]
}
],
"excludedPaths": [
{
"path": "/'_OLD'/*"
}
]
},
"_rid": "vPAMAO7LQQA=",
"_ts": 1518383426,
"_self": "dbs/vPAMAA==/colls/vPAMAO7LQQA=/",
"_etag": "\"00001f11-0000-0000-0000-5a80b1420000\"",
"_docs": "docs/",
"_sprocs": "sprocs/",
"_triggers": "triggers/",
"_udfs": "udfs/",
"_conflicts": "conflicts/"
}
我是否必须在Endpoint-URI中反映正确的数据库和/或集合?
当我使用令牌时,我得到了异常
Unauthorized, The input authorization token can't serve the request
当我尝试使用(非null)PermissionFeed时,Constructor会抛出
System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
bei Microsoft.Azure.Documents.AuthorizationHelper.IsResourceToken(String token)
bei Microsoft.Azure.Documents.Client.DocumentClient..ctor(Uri serviceEndpoint, IList`1 resourceTokens, ConnectionPolicy connectionPolicy, Nullable`1 desiredConsistencyLevel)
bei Microsoft.Azure.Documents.Client.DocumentClient..ctor(Uri serviceEndpoint, IList`1 permissionFeed, ConnectionPolicy connectionPolicy, Nullable`1 desiredConsistencyLevel)
我一直在咀嚼这两天没有运气。其他所有事情都是在使用Cosmos DB的公园散步,但这让我感到疯狂,因为我似乎无法找到AuthToken与.NET API一起使用的任何示例。
服务器的时区与客户端不同(我正在运行正在开发的中间件) - 但这可能不是问题,对吧?我使用UTCNow比较示例中的到期时间,但创建权限完全取决于Cosmos DB ...?
答案 0 :(得分:0)
原来我使用了错误的构造函数。
当我开始开发时,我使用的是DocumentClient构造函数,它将(master-)键作为SecureString
。然后我只是插入当前接口中的令牌(特别是一个名为SetAuthKey(string plainTextKey)
的方法),并在内部调用 - 在这种情况下是错误的 - 构造函数。
使用正确的构造函数,就可以了。
也许这会帮助这个星球上的其他灵魂,所以值得痛苦。