gpt4 book ai didi

windows - 为什么 LogonUser(...) 不适用于域帐户?

转载 作者:可可西里 更新时间:2023-11-01 12:52:23 25 4
gpt4 key购买 nike

我一直在尝试使用 LogonUser(...) 获取用户帐户的访问 token ,如 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。

是什么阻止了它的工作?

最佳答案

在我的案例中,问题与提问者类似,是我尝试验证的帐户位于我当前计算机不属于的域中。与原始海报不同,我的机器不应该也不能成为其他域的一部分。不过,我希望登录对该域上的资源执行操作。

答案如下

bool success = LogonUser(
userName,
domain,
password,
(int)LOGON32_LOGON_NEW_CREDENTIALS, //9
(int)LOGON32_PROVIDER_DEFAULT, //0
out userToken);

定义了以下常量:

public const int LOGON32_LOGON_NEW_CREDENTIALS = 9;
public const int LOGON32_PROVIDER_DEFAULT = 0;

希望这能帮助其他在类似情况下迷路的人。

编辑:如以下评论所述,此登录类型允许调用者克隆其当前 token 并为出站连接指定新凭据。新的登录 session 具有相同的本地标识符,但对其他网络连接使用不同的凭据。因此,即使密码错误,“success”也会返回 true。除了“成功”之外,您还需要进行额外检查,以确认凭据确实有效。

这在我的初始用例中不是问题,因为我们在另一个函数中使用当前网络用户的凭据从安全存储中提取明文密码。因此,除非该系统和事件目录之间存在不一致,否则它永远不会出错,在这种情况下我们会遇到更大的问题。

关于windows - 为什么 LogonUser(...) 不适用于域帐户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7488786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com