使用 MongoClientSettings 时无法进行身份验证
Unable to authenticate when using MongoClientSettings
我正在尝试连接到 MongoDb 数据库。
- 我的客户:ASP.NET 核心 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: A timeout occured after 3000ms selecting a server using CompositeServerSelector{ Selectors = MongoDB.Driver.MongoClient+AreSessionsSupportedServerSelector, LatencyLimitingServerSelector{ AllowedLatencyRange = 00:00:00.0150000 } }. Client view of cluster state is { 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: An exception occurred while opening a connection to the server. ---> MongoDB.Driver.MongoAuthenticationException: Unable to authenticate username 'myUsername' on database 'myDatabaseName'. ---> MongoDB.Driver.MongoCommandException: Command authenticate failed: auth failed.
我一直在为两种方法使用完全相同的值(大写和小写)。但只有 MongoClientSetting
方法会抛出异常。但是出于不同的原因,我宁愿使用 MongoClientSetting
方法也不愿使用基于连接字符串的方法。
我是否遗漏了什么或者这是 MongoDb C# 驱动程序中的错误?
为避免误解:在上面的示例中,我将所有真实值(用户名、密码等)都换成了假值。
感谢您的帮助!
这是一个与调用 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"
);
我正在尝试连接到 MongoDb 数据库。
- 我的客户:ASP.NET 核心 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: A timeout occured after 3000ms selecting a server using CompositeServerSelector{ Selectors = MongoDB.Driver.MongoClient+AreSessionsSupportedServerSelector, LatencyLimitingServerSelector{ AllowedLatencyRange = 00:00:00.0150000 } }. Client view of cluster state is { 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: An exception occurred while opening a connection to the server. ---> MongoDB.Driver.MongoAuthenticationException: Unable to authenticate username 'myUsername' on database 'myDatabaseName'. ---> MongoDB.Driver.MongoCommandException: Command authenticate failed: auth failed.
我一直在为两种方法使用完全相同的值(大写和小写)。但只有 MongoClientSetting
方法会抛出异常。但是出于不同的原因,我宁愿使用 MongoClientSetting
方法也不愿使用基于连接字符串的方法。
我是否遗漏了什么或者这是 MongoDb C# 驱动程序中的错误?
为避免误解:在上面的示例中,我将所有真实值(用户名、密码等)都换成了假值。
感谢您的帮助!
这是一个与调用 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"
);