Цель
Аутентификация пользователей в 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
этого класса, потому что кажется, что строки передаются как обычные строковые параметры.