Как получить доступ к mongodb с помощью механизма аутентификации gssapi?

Я пытаюсь подключиться к серверу MongoDB через сертификат ssl, используя C#. Я получаю System.TimeoutException (Тайм-аут произошел после 30000 мсек при выборе сервера с помощью CompositeServerSelector).

Я начал с подключения через объект MongoClientSetting. Вот код:

MongoClientSettings settings = new MongoClientSettings();
settings.MaxConnectionLifeTime = new TimeSpan(12, 0, 0);

settings.UseSsl = true;
settings.VerifySslCertificate = false;
var cert = new X509Certificate2("mongoDBCAFile.cer");
settings.SslSettings = new SslSettings{
    ClientCertificates = new[] { cert }
};

settings.Servers = new[]{
    new MongoServerAddress("xyz1.intranet.companyname.com", 12345),
    new MongoServerAddress("xyz2.intranet.companyname.com", 12345)
};

settings.ReplicaSetName = "replicaName";

var cred = MongoCredential.CreateGssapiCredential("username@intranet.companyname.com").WithMechanismProperty("SERVICE_NAME", "servicename");
settings.Credential = cred;

var client = new MongoClient(settings);

var database = client.GetDatabase("DatabaseName");
var collection = database.GetCollection<BsonDocument>("CollectionName");

//This is the place of error
var count1 = collection.CountDocuments(new BsonDocument());

Я попытался поиграть с ConnectTimeout, SocketTimeout и wTimeOut, но ошибка была такой же.

Я также попытался сделать то же самое, используя строку подключения, как упоминалось в здесь, но я бы не понял, как создать строку подключения с таким количеством параметров.

0
0
385
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Нашел решение.

Проблема заключалась в аутентификации пользователя на внешнем сервере. Сервер MongoDB ожидал разрешения от этого внешнего сервера, но поскольку аутентификация никогда не была успешной, MongoDB всегда приводил к System.TimeoutException.

Вот код исправления.

settings.ReplicaSetName = "replicaName";

SecureString pwd = new NetworkCredential("intranet/userName", "myPassword").securePassword;
var cred = MongoCredential.CreateGssapiCredential("username/intranet.companyname.com", pwd).WithMechanismProperty("SERVICE_NAME", "serviceName").WithMechanismProperty("CANONICALIZE_HOST_NAME", "true");
settings.Credentials = cred;

Другие вопросы по теме