.net -/NetOnly 从非域 PC 模拟域用户

标签 .net impersonation process.start

我相信我已经阅读了所有相关的 Process.Start 模拟问题 - 至少是我可以通过 Google 找到的所有内容,但我还没有找到符合这种情况的问题(90% 是回复:ASP 这是一个完全不同的球赛)

场景:我们有一个小工具,它使用当前用户凭据查询 AD,获取匹配搜索的服务器列表,通过 SMB 连接到它们并获取共享列表。

有人要求我使用域用户的凭据使此过程在不在域中的计算机上运行时能够正常工作。

我添加了一个开关,它会在启动时提示输入凭据,然后使用适当的凭据提示 Process.Start() 相同的可执行文件(以节省学习 runas/netonly ... 的人)。

这给我带来了一些问题。我正在测试的代码如下...

Dim ProcInfo As New ProcessStartInfo With {
        .Domain = dlgImpersonate.Domain,
        .UserName = dlgImpersonate.Username,
        .Password = dlgImpersonate.Password,
        .FileName = Reflection.Assembly.GetEntryAssembly.Location,
        .UseShellExecute = False}

Try
    Process.Start(ProcInfo)
    ShouldEnd = True
Catch ex As Exception
    'HandleException(ex)
    MessageBox.Show(ex.Message, "Impersonation failed", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try

所以...如果我在我的机器上(在域上)运行代码,我可以冒充任何人。查询 AD 有一些怪癖,但那是另一个问题。

如果我在一台全新的机器上(不是在域上)运行代码,我得到:

Win32Exception: Logon failure: unknown user name or bad password
Stack:
    at Process.StartWithCreateProcess(ProcessStartInfo startInfo)
    at Process.Start(ProcessStartInfo startInfo)
    ...My code

我想知道机器是否只是不知道该域或如何对其进行身份验证,所以我随后尝试从命令提示符...

runas /netonly /user:MyDomain\MyUser Test.exe

这很好用。

那么...我如何找到 Process.Start 未按预期进行身份验证的原因?

注意:凭据是正确的 - 我什至诉诸从记事本复制/粘贴以进行完整性检查

最佳答案

查看此链接:http://codebetter.com/jameskovacs/2009/10/12/tip-how-to-run-programs-as-a-domain-user-from-a-non-domain-computer/

基本上,您将 runas 与/netonly 一起使用。但是您仍然需要手动输入密码。您可以执行/savecred 来缓存信用。

关于.net -/NetOnly 从非域 PC 模拟域用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19767802/

相关文章:

c# - 如何使用linq C#展平列表

c# - AppWinStyle 不适用于 Process.start

c# - Process.Start() 对于 *.jpg 文件失败

c# - 在 foreach 循环中连接字符串时出现错误

C# 语法解释

c# - C# LINQ 结果的差异

windows - 如果 ImpersonateSelf() 失败后的 RevertToSelf() 会致命吗?

没有 user_impersonation 的 Azure 资源管理 API,可能吗?

c# - 如何在 C# 中将文件保存在同一网络中的另一台机器上?

c# - Diagnostics.Process 无法使用 Adob​​e Reader 打开 PDF 文件