Как замаскировать пароль ввода пользователя в параметре C# custom Cmdlet
В моей программе мне нужно попросить пользователя ввести пароль в параметре:
[Cmdlet(VerbsCommon.Get, "MyTest"]
public class GetMyTest : PSCmdlet
{
[Parameter(Mandatory=true)]
public ? Password { get; set;}
}
Я не могу понять, какой правильный тип использовать для пароля. Другой вопрос: как безопасно обрабатывать пароли в собственно написанном командлете PowerShell?
Принятый ответ попросил использовать read-host в коде, но я должен использовать параметр, чтобы запросить это поле.
Я также пытался использовать SecureString для пароля, но я не могу дать SecureString этому параметру, поскольку он будет автоматически принят как строка, а не как безопасная строка.
Есть ли способ добиться следующего использования:
Get-MyTest -Password ***** (where I actually type in 'abcde' but the input is masked.)
2 ответа
Невозможно сделать так, чтобы определенная часть ввода командной строки была защищена звездочками - ввод командной строки - это просто текст.
Опции
- сохранить пароль в файле, чтобы он не был виден на входе. Теперь вопрос заключается в том, как защитить этот файл, но он может работать в некоторых случаях - т.е. указать зашифрованный пароль, аналогичный зашифрованным настройкам в файле web.config.
- потребовать от пользователя ввести пароль в
- вместо пароля требуется, чтобы пользователь входил в систему с этой учетной записью (для аутентификации Windows)
- если есть какой-то способ получить кратковременный токен (например, с помощью OAUTH) - вы можете использовать его в виде открытого текста вместо пароля
Обычно делается то, что вы сохраняете пароль в строковой переменной, а затем каким-то образом хешируете его (SHA256, MD5 или около того), чтобы сохранить его в базе данных (или сравнить его и разрешить или нет пользователю доступ к приложению).,
Так что я не уверен, что для этого есть лучший вариант.