2014-01-30 6 views
1

В моей программе мне нужно задать пользователю ввести пароль в параметре:Как маскировать ввода пароля пользователя в параметре C# пользовательских CMDlet

[Cmdlet(VerbsCommon.Get, "MyTest"] 
public class GetMyTest : PSCmdlet 
{ 
    [Parameter(Mandatory=true)] 
    public ? Password { get; set;} 
} 

Я не могу понять, что это правильный тип использовать для пароля , В другом вопросе: How does one securely handle passwords in a custom written PowerShell cmdlet?

Принятый ответ попросил использовать read-host в коде, но я должен использовать параметр для запроса этого поля.

Я также пытался использовать SecureString для пароля, но я не могу дать SecureString этому параметру, поскольку он будет автоматически принят как строка, а не защищенная строка.

Является ли это каким-либо образом, чтобы достичь следующего использования:

Get-MyTest -Password ***** (where I actually type in 'abcde' but the input is masked.) 

ответ

1

там нет никакого способа, чтобы сделать конкретная часть ввода командной строки для защиты со звездочками - com Строка ввода строки - это просто текст.

Варианты

  • магазин пароль в файле, так что не видно на входе. Теперь вопрос заключается в том, как защитить этот файл, но может работать для некоторых случаев - то есть указать зашифрованный пароль, аналогичный зашифрованным настройкам в web.config.
  • требует, чтобы пользователь вводил пароль в
  • .
  • вместо этого пароль требует от пользователя входа в систему с этой учетной записью (для ОС Windows AUTH)
  • , если есть какой-то способ, чтобы получить кратковременный маркер (т.е. с помощью OAuth) - вы можете использовать это в текстовом формате вместо пароля
1

Обычно то, что делается в том, что вы храните пароль в строковой переменной типизированных а затем хэш его каким-то образом (SHA256, MD5, или так), чтобы сохранить его в базе данных (или сравнить его и позволить или не пользователю доступа к приложению.

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