【发布时间】:2011-11-21 06:33:36
【问题描述】:
我一直在尝试使用LogonUser(...) 来获取用户帐户的访问令牌,如this MSDN sample。
// Call LogonUser to obtain a handle to an access token.
bool returnValue = LogonUser(userName, domainName, Console.ReadLine(),
LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,
out safeTokenHandle);
当我运行示例(具有管理员权限)时,如果给定域 . 和本地用户帐户名和密码,它可以正常工作,但无论我做什么,我都会收到错误代码 1326(登录失败: 未知用户名或密码错误)如果我尝试使用域帐户。如果我为域输入垃圾,我会得到相同的结果,这让我怀疑它是否真的在联系 DC。
是什么阻止了它的工作?
【问题讨论】:
-
不幸的是,这可能是由于很多事情造成的。机器是否连接到域?是否允许域用户登录该计算机? DNS 设置是否正确配置? (我确实看到一篇 Citrix 文章暗示这可能是一个问题。)。以下文章提供了一些有关当您为域输入垃圾时发生的情况的信息 - groups.google.com/group/…
-
您是否验证了这在没有 Console.ReadLine() 调用的情况下也可以工作(例如,直接提供密码作为字符串)?
-
密码的来源没有区别——当它被传递给
LogonUser时是一个字符串。 -
要检查与域的连接是否正常,请尝试以域用户的身份交互登录。您是否仔细检查过您传递的域名是否正确?你试过全限定域名吗?
-
我猜这可能是由于缺少 SE_TCB_NAME 权限。您可以通过在“本地安全策略”-“本地策略”-“用户权限”中添加域帐户以“作为操作系统的一部分”来测试(如果域策略允许)。跨度>
标签: windows security winapi active-directory impersonation