保存 Windows 登录名而不保存密码(如 Kerberos 票证)

问题描述 投票:0回答:2

我想在 C# 程序中自动执行一些管理任务,为此我需要获取凭据(具有所需权限的域用户的用户名和密码,例如管理员)。然后我想安全地存储“登录名”,这样我就不必为我想要执行的每项任务都询问它。我知道有多种索要凭据的官方方法(例如

CredUIPromptForWindowsCredentials
或 Powershell 的
Get-Credential
),但这些以明文形式(或作为安全字符串)返回用户名和密码,我必须自己安全地存储这些信息。

有没有办法获得一种登录令牌,允许我在远程计算机上执行操作,而无法恢复密码?我正在寻找相当于 Kerberos 票证授予票证的 Windows 版本 - 你可以

 kinit
,输入您的密码,并获取一张在网络上对您进行身份验证的票证,而无需再次使用您的密码(票证将在设定的时间后过期)。

我想到的一个解决方法是不自己处理凭据,而是直接使用 Window 的身份验证并以不同的用户身份运行子进程。缺点是这会使我的应用程序变得更加复杂,并且它只能在同一域内工作。

为了澄清,我想使用各种管理界面(WMI、Powershell 远程处理、PSExec),并且它最好可以在任何计算机上工作,即使在目标计算机域之外也是如此。 “令牌”的生命周期至少是我的程序的运行时间,但如果我可以将“令牌”保存到磁盘并每天多次重复使用它也会很有用。

c# powershell windows-authentication
2个回答
0
投票

您是否尝试过 Windows 凭据管理器

您可以将凭据存储在 Windows 凭据管理器中一次,然后使用 PowerShell 以编程方式访问它。这是 Microsoft 在本地存储凭据的安全方式。

在 Windows 计算机上安装凭据管理器

Install-Module -Name Credential Manager

使用 powershell 存储新凭据

New-StoredCredential -Target Contoso -Username User1 -Password Password

还有另一种方法可以在凭据管理器中存储新密码

Get-Credential -Username User2 -Message “Please enter your password:” | New-StoredCredential -Target Contoso

然后要检索存储的凭据,请使用 Get-StoredCredential

$Cred = Get-StoredCredential -Target Contoso

不幸的是,凭证管理器模块附带的文档并不多,但您可以通过以下命令获取更多详细信息

Get-Help Get-StoredCredential


0
投票

这就是通用凭证。如何制作 Windows (Kerberos) 凭据?

© www.soinside.com 2019 - 2024. All rights reserved.