使用特殊界面自动以不同用户身份运行

使用特殊界面自动以不同用户身份运行

我想以不同的 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。

同时,-VerbPowerShell 的 Start-Process 中的选项间接通过 Explorer(使用 ShellExecute)进行,它接受RunAsUser“以其他用户身份运行”功能的动词:

Start-Process -Verb RunAsUser notepad.exe

(“以管理员身份运行”项对应于RunAs动词。)

相关内容