如何使用资源令牌在 .NET API 中初始化文档客户端



我创建了一个中间件,用于创建用户和权限,并将令牌提供给我的客户端,如本文所述。

但是,我尚未成功使用令牌连接到我的 azure 数据库。我已经尝试使用令牌作为普通String,并在适当的 DocumentClient 构造函数中完全IList<Permission>用户的权限。

以下是我的用户权限:

{
"_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
}

我像在DocumentClient构造函数中一样使用_token这是对的吗? 这是我想要访问的集合:

{
"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/"
}

我是否必须在终结点 URI 中反映正确的数据库和/或集合?

当我使用令牌时,我收到异常

Unauthorized, The input authorization token can't serve the request

当我尝试使用(非空)PermissionFeed时,构造函数抛出

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...?

事实证明我使用了错误的构造函数。

当我开始开发时,我使用的是 DocumentClient 构造函数,它将(主)键作为SecureString。然后我只是在我当前的接口中插入令牌(特别是一个名为SetAuthKey(string plainTextKey)的方法),并在内部调用了 - 在这种情况下是错误的 - 构造函数。

使用正确的构造函数,它就可以工作。

也许这会帮助这个星球上的其他灵魂,所以值得痛苦。

最新更新