我想将我的身份验证从sha-1转移到sha 256,然而,即使我创建了一个散列器,我也得到了一个错误,指出它无法使用sha1进行身份验证。代码中没有对这个旧机制的引用,我已经在我的mongo DB中创建了一个sha256用户。这意味着它以某种方式被默认为旧版本。查看代码,我得到警告,说明MongoClientSettings已过时,但浏览web时,我没有看到替代方案,除非我打算使用连接字符串。mongo客户端的文档仍然接受构造函数中的mongoClientSettings吗?我使用的是MongoDB版本4.10和mongocsharpdriver 2.10
public static MongoClientSettings PrepareMongoSettings(string dbName)
{
MongoClientSettings mongoSettings = new MongoClientSettings();
mongoSettings.Server = new MongoServerAddress(Host, Port);
mongoSettings.ConnectionMode = 0;
if (!string.IsNullOrWhiteSpace(MongoUsername))
{
List<MongoCredential> mongoCredentials = new List<MongoCredential>();
MongoCredential mongoCred = MongoCredential.CreateCredential("admin", MongoUsername, MongoPassword);
mongoCredentials.Add(mongoCred);
mongoSettings.Credentials = mongoCredentials;
}
return mongoSettings;
}我已经创建的哈希器是相当基本的,密码应该是哈希之前,这段代码它是输入到数据库。
public static class HasherSha256
{
public static byte[] GetPasswordHash(string username, string password)
{
// get salted byte[] buffer, containing username, password and some (constant) salt
byte[] buffer;
using (System.IO.MemoryStream stream = new MemoryStream())
using (System.IO.StreamWriter writer = new StreamWriter(stream))
{
writer.Write("MyDB");
writer.Write(username);
writer.Write(password);
writer.Flush();
buffer = stream.ToArray();
}
return ComputeSha256Hash(buffer);
}
static byte[] ComputeSha256Hash(byte[] rawData)
{
using (SHA256 sHA256 = SHA256.Create())
{
return sHA256.ComputeHash(rawData);
}
}
}}
发布于 2020-02-21 22:32:26
我没有看到任何文档说MongoClientSettings已经过时了。这是连接到MongoDB的一个非常有用的功能。See Documentation here。Credentials已弃用,但被只接受一个凭据的Credential所取代。不是数组。
new MongoClientSettings()
{
ConnectionMode = ConnectionMode.ReplicaSet,
Credential = MongoCredential.CreateCredential("admin", Username, Password),
ReplicaSetName = "ReplicaSetName",
Servers = new List<MongoServerAddress>(){new MongoServerAddress("server", 27017), new MongoServerAddress("server2", 27017)}.ToArray(),
ApplicationName = "AppName",
}https://stackoverflow.com/questions/60328605
复制相似问题