【问题标题】:Unable to authenticate when using MongoClientSettings使用 MongoClientSettings 时无法进行身份验证
【发布时间】:2018-05-28 12:43:10
【问题描述】:

我正在尝试连接到 MongoDb 数据库。

  • 我的客户端:ASP.NET Core 2 和 MongoDb.Driver 2.6.1
  • 我的服务器:MongoDb 3.6.5 社区版,独立(无副本集),Windows Server 2016 上的 64 位。

通过连接字符串进行身份验证正在工作:

public MongoDbContext(AppSettings appSettings)
{
    var connectionString = "mongodb://myUsername:myPassword@myDomain.com:27017/myDatabaseName";

    _client = new MongoClient(connectionString);

    // ...
}

MongoClientSettings 的身份验证工作:

public MongoDbContext(AppSettings appSettings)
{
    var credentials = MongoCredential.CreateMongoCRCredential(databaseName: "myDatabaseName", username: "myUsername", password: "myPassword");
    var server = new MongoServerAddress(host: "myDomain.com", port: 27017);

    var mongoClientSettings = new MongoClientSettings
    {
        Credential = credentials,
        Server = server,
        ConnectionMode = ConnectionMode.Standalone,
        ServerSelectionTimeout = TimeSpan.FromSeconds(3)
    };

    _client = new MongoClient(mongoClientSettings);

   // ...
}

TimeoutException:使用 CompositeServerSelector{ Selectors = MongoDB.Driver.MongoClient+AreSessionsSupportedServerSelector, LatencyLimitingServerSelector{ AllowedLatencyRange = 00:00:00.0150000 } } 选择服务器 3000 毫秒后发生超时。集群状态的客户端视图是 { ClusterId : "1", ConnectionMode : "Standalone", Type : "Standalone", State : "Disconnected", Servers : [{ ServerId: "{ ClusterId : 1, EndPoint : "Unspecified/myDomain. com:27017" }", EndPoint: "Unspecified/myDomain.com:27017", State: "Disconnected", Type: "Unknown", HeartbeatException: "MongoDB.Driver.MongoConnectionException: 打开与服务器的连接时发生异常. ---> MongoDB.Driver.MongoAuthenticationException:无法在数据库“myDatabaseName”上验证用户名“myUsername”。---> MongoDB.Driver.MongoCommandException:命令验证失败:验证失败。

我对这两种方法都使用了完全相同的值(大写和小写也是如此)。但只有MongoClientSetting 方法会引发异常。不过出于不同的原因,我宁愿使用MongoClientSetting 方法而不是基于连接字符串的方法。

我是否遗漏了什么或者这是 C# 的 MongoDb 驱动程序中的错误?

为了避免误解:在上面的示例中,我将所有真实值(用户名、密码等)换成了假值。

感谢您的帮助!

【问题讨论】:

    标签: c# mongodb-.net-driver


    【解决方案1】:

    这是与调用MongoCredential.CreateMongoCRCredential 相关的身份验证问题,它使用MONGODB-CR(挑战-响应)身份验证机制创建凭据。

    将提供的异常跟踪到MongoDBCRAuthenticator

    虽然deprecated as of MongoDB 3.6,原来的问题使用MongoDb.Driver 2.6.1

    但是,工作连接字符串没有任何authMechanism 身份验证选项,这意味着它将使用默认身份验证机制。

    使用MongoCredential.CreateCredential 创建一个默认凭据,类似于使用连接字符串的方式

    var credentials = MongoCredential.CreateCredential(
        databaseName: "myDatabaseName", 
        username: "myUsername", 
        password: "myPassword"
    );
    

    【讨论】:

    • 哇。早上好恩科西。你的小费有效。精彩的。但是我的原始代码不起作用的事实是一个错误,对吗?无论如何,非常感谢。我的代码现在干净多了。
    猜你喜欢
    • 2013-05-30
    • 1970-01-01
    • 2016-01-11
    • 2016-10-11
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多