如何在C#custom Cmdlet参数中屏蔽用户输入密码

时间:2014-01-30 16:52:22

标签: c# powershell cmdlet pscmdlet

在我的程序中,我需要在参数中询问用户密码:

[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 for Password,但我无法为此参数提供SecureString,因为它会自动被接受为字符串,而不是安全字符串。

是否有任何方法可以实现以下用途:

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

2 个答案:

答案 0 :(得分:1)

通常做的是将密码存储在字符串类型的变量中,然后以某种方式对其进行哈希(SHA256,MD5等)以将其存储在数据库中(或者比较它并允许或不允许用户使用访问该应用程序。

所以,我不确定有更好的类型。

答案 1 :(得分:1)

没有办法让命令行输入的特定部分用星号保护 - 命令行输入只是纯文本。

选项

  • 将密码存储在文件中,使其在输入中不可见。现在的问题是如何保护该文件,但可能适用于某些情况 - 即指定类似于web.config中加密设置的加密密码
  • 要求用户在
  • 中键入密码
  • 而不是密码要求用户使用该帐户登录(对于Windows身份验证)
  • 如果有某种方法可以获得短期令牌(即使用OAUTH) - 您可以使用明文而不是密码