Пн go дБ ша 1 до ша256 - PullRequest
       2

Пн go дБ ша 1 до ша256

1 голос
/ 21 февраля 2020

Я хотел бы переместить мою аутентификацию с sha-1 на sha 256, однако, даже несмотря на то, что я создал хеш, я получаю сообщение об ошибке, утверждающее, что он не может аутентифицироваться с использованием sha1. В коде нет ссылки на этот старый механизм, и я уже создал пользователя sha256 в моей базе данных mon go. Что означает, что по умолчанию это как-то по умолчанию. Глядя на код, я получаю предупреждения о том, что MongoClientSettings устарел, но при просмотре веб-страниц я не вижу альтернативы, если только вместо этого я не собираюсь использовать строку подключения? Документация для клиента mon go все еще принимает 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;
    }

Созданная мною хеш-функция довольно проста c пароль должен быть хеширован до того, как этот код будет введен в БД.

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);

        }

    }
}

}

1 Ответ

0 голосов
/ 21 февраля 2020

Я не вижу никакой документации, которая говорит, что MongoClientSettings устарела. Это очень доступная функция для подключения к MongoDB. См. Документацию здесь . 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",
}
...