Как замаскировать пароль ввода пользователя в параметре 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 или около того), чтобы сохранить его в базе данных (или сравнить его и разрешить или нет пользователю доступ к приложению).,

Так что я не уверен, что для этого есть лучший вариант.

Другие вопросы по тегам