具有资源令牌的Mongo客户端API

时间:2019-10-29 14:44:27

标签: c# mongodb azure azure-cosmosdb azure-cosmosdb-mongoapi

我一直在尝试将Mongo API宇宙帐户用于多个数据库,并希望为各个资源生成资源令牌。我正在看到文档数据库的实现,如下所示。

client = new DocumentClient(new Uri(endpointUrl), resourceToken);

但是,我正在寻找与Mongo.Driver相关的实现

MongoClientSettings settings = new MongoClientSettings();
        settings.Server = new MongoServerAddress(host, 10255);
        settings.UseSsl = true;
        settings.SslSettings = new SslSettings();
        settings.SslSettings.EnabledSslProtocols = SslProtocols.Tls12;

        MongoIdentity identity = new MongoInternalIdentity(dbName, userName);
        MongoIdentityEvidence evidence = new PasswordEvidence(tokepass2);

        settings.Credential = new MongoCredential("SCRAM-SHA-1", identity, evidence);

        MongoClient client = new MongoClient(settings);

我正在尝试用生成的资源令牌替换“ tokepass2”。但这是行不通的,最终导致异常

One or more errors occurred. (Unable to authenticate using sasl protocol mechanism SCRAM-SHA-1.)

我知道我们可以在标头中使用令牌进行基于REST的后调用,但是我正在寻找与Mongo Client相关的实现(如果已实现)。

1 个答案:

答案 0 :(得分:0)

不幸的是,我不认为它可以在C#Mongo DB驱动程序中实现。基于Wire protocol compatibility

  

Azure Cosmos DB实现了常见NoSQL数据库的有线协议   包括Cassandra,MongoDB,Gremlin和Azure Tables Storage。通过   直接提供有线协议的本地实现   高效地在Cosmos DB中使用,它允许现有的客户端SDK,驱动程序,   SQL数据库的工具和工具以与Cosmos DB进行交互   透明地。 Cosmos DB不使用数据库的任何源代码   为任何NoSQL数据库提供与有线兼容的API。

     

默认情况下,使用Azure Cosmos DB的API创建的新帐户用于   MongoDB与MongoDB有线协议的3.6版兼容。   任何了解此协议版本的MongoDB客户端驱动程序   应该能够本地连接到Cosmos DB。

Cosmos db mongo api仅对Mongo DB实现有线协议,而对mongo db没有任何特定的sdk。以及其他mongo db驱动程序,例如mongo c#驱动程序或mongoose等,它们是为mongo db构建的,而不是为cosmos db mongo api构建的。因此,这些驱动程序无法直接支持资源令牌功能。您不能用资源令牌替换主密钥。

如果您想使用资源令牌,则可以使用:

1。您在问题中提到的REST API

2。将mongo db迁移到cosmos db sql api。请参考以下链接:https://docs.microsoft.com/en-us/azure/cosmos-db/import-data