我想以不同的 Windows 用户身份运行程序,并受密码保护。现在,在我的公司中,有一个单点登录系统,如果您可以输入电子邮件中附带的 PIN,它将验证您是另一个 Windows 用户。此 SSO PIN 身份验证方法通过标准 Windows 对话框提供(未以任何可见方式自定义),并在 Windows 登录时提供(如果以该用户身份登录)以及在需要身份验证的多种其他情况下提供(如果未以该用户身份登录)。
如果我使用“UI”方法执行此操作,我会按下 Shift,右键单击我的程序,选择“以不同用户身份运行”,然后通过看似标准的 Windows 对话框获取 SSO PIN 界面提示。
但是,当从命令行尝试执行此操作时,如下所示:
runas /user:NETWORK\<username> path/to/program.exe
我没有使用特殊界面来输入我的 SSO PIN,而是在命令行窗口中收到以下提示:
Enter the password for NETWORK\<username>:
如果我输入密码,我就能得到我想要的东西,但是 - 为什么它会绕过 PIN 呢?如何绕过它?或者更一般地说,如何使用 SSO PIN 流程轻松地自动以用户身份打开程序,尤其是在启动时?
答案1
为什么它会绕过 PIN 码
它并没有“规避”任何一开始就不是强制使用的东西。与“以管理员身份运行”UAC 提升提示不同(程序只能要求提示符,但操作系统控制显示它),在“以...身份运行用户“在这种情况下,程序本身负责显示它想要的任何凭证提示。
(这可能是因为“以其他用户身份运行”功能比 UAC 早了十年,并且 MS 尚未对其进行重新设计以使用 UAC 的安全提示。)
因此,这里是图形 shell/文件管理器 (Explorer) 本身收集凭据并将其发送到辅助登录服务。由于runas
不依赖于 Explorer,而是直接与辅助登录服务对话,因此它也无法使用 Explorer 的 UI。
同时,-Verb
PowerShell 的 Start-Process 中的选项做间接通过 Explorer(使用 ShellExecute)进行,它接受RunAsUser
“以其他用户身份运行”功能的动词:
Start-Process -Verb RunAsUser notepad.exe
(“以管理员身份运行”项对应于RunAs
动词。)