【问题标题】:Mongo db sha 1 to sha256Mongodb sha1 转 sha256
【发布时间】:2022-02-15 00:41:57
【问题描述】:

我想将我的身份验证从 sha-1 转移到 sha 256,但是,即使我创建了一个散列器,我也收到一个错误,指出它无法使用 sha1 进行身份验证。代码中没有对这个旧机制的引用,我已经在我的 mongo DB 中创建了一个 sha256 用户。这意味着它以某种方式默认为旧版本。查看代码我收到警告说 MongoClientSettings 已过时但浏览网页我没有看到替代方案,除非我打算使用连接字符串代替? 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);

        }

    }
}

}

【问题讨论】:

    标签: c# mongodb sha256


    【解决方案1】:

    我没有看到任何说明 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",
    }
    

    【讨论】:

    • 嗨@jawad,我正在使用 mongo CSharp 驱动程序 2.10。只是为了确认我不必强迫它使用 sha 256? mongo 如何知道要使用哪种加密类型?
    【解决方案2】:

    Mongo DB 4.0 支持 SCRAM-SHA-256。 Salted Challenge Response Authentication Mechanism (SCRAM-SHA-256) 使用 SHA-256 哈希函数。

    启用它的最简单方法是将其添加到连接字符串中。例如:

    MongoClient mongoClient = MongoClients.create("mongodb://user1:pwd1@host1/?authSource=db1&authMechanism=SCRAM-SHA-256");
    

    Check out the official documentation here

    【讨论】:

      猜你喜欢
      • 2019-09-18
      • 2017-03-30
      • 2016-07-20
      • 1970-01-01
      • 2017-08-04
      • 2011-10-21
      • 2017-07-06
      • 2020-11-05
      • 2021-08-12
      相关资源
      最近更新 更多