Безопасно передать пароль AD из Mvc web в объект LdapConnection - PullRequest
0 голосов
/ 06 февраля 2019

Цель

Аутентификация пользователей в Active Directory с помощью аутентификации на основе форм из приложения MVC.

Метод

Я буду использовать SSL для передачи учетных данных от пользователя к контроллеру аутентификации через запрос https.Это должно обеспечить безопасность пароля во время транспортировки.Для проверки учетных данных я буду использовать метод LdapConnection.Bind.Пример:

public bool ValidateCredentials(string username, SecureString password)
    {
        bool valid = false;
        var creds = new NetworkCredential(username, password, DomainName);
        var identifier = new LdapDirectoryIdentifier("domainController");
        LdapConnection connection = null;
        try
        {
            connection = new LdapConnection(identifier, creds, AuthType.Kerberos);
            connection.Bind();
            valid = true;
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
        if(connection != null) connection.Dispose();
        return valid;
    }

Используя SecureString, это должно защитить пароль при подключении к Active Directory.

Дилемма

Когда я получупароль из запроса https и связать его с контроллером, он будет передан в виде обычной строки.Затем мне придется преобразовать его в SecureString, чтобы передать его в мою функцию ValidateCredentials.Это создаст уязвимость, поскольку в течение короткого промежутка времени пароль будет отображаться в виде простого текста.

Как я могу сохранить эту строку в безопасности все время, и я обдумываю это?

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

...