手动netlogon

时间:2011-11-03 17:48:25

标签: c++ winapi

任何人都知道如何使用手动netlogon或任何其他方式对远程域上的用户进行身份验证?我需要测试身份验证。

现在我们正在使用模拟并调用任意函数。问题是将登录的任意winapi功能。问题是某些域允许该空函数调用该函数,从而导致误报。

唯一的目标是针对未添加本地计算机的远程域获得可靠,快速的身份验证,因此我不会拒绝其他方法。

这是我们通过提交MSDN票证获得的解决方案。

if(!LogonUser(username.c_str(), domain.c_str(), password.c_str(), LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_WINNT50, &token))
{
    debug->DebugMessage(Error::GetErrorMessageW(GetLastError()));
    CloseHandle(token);
    RevertToSelf();
    return false;
}

if(!ImpersonateLoggedOnUser(token))
{
    debug->DebugMessage(Error::GetErrorMessageW(GetLastError()));
    CloseHandle(token);
    RevertToSelf();
    return false;
}
...

int err = NetUserModalsGet ....

if (err != ERROR_SUCCESS) logged_on = false;
RevertToSelf();

2 个答案:

答案 0 :(得分:1)

如果您要做的就是回答“这些凭据是否对我可能不属于其中的特定域名有效?”那么你可能会在现有的东西中看到一些琐事。许多Linux / UNIX应用程序针对没有域成员身份的任意域提供NTLM身份验证。大多数使用winbindd,我怀疑在Windows系统上运行会遇到麻烦。

值得注意的是,虽然有一个apache module,但可以在没有任何外部依赖关系的情况下运行。您可能会有一些运气查看其来源,特别是mod_ntlm.c,并了解他们如何为域控制器制作请求数据包并解析响应。

答案 1 :(得分:0)

不确定您是否考虑过在远程域上使用Windows集成安全性存在许多基础结构配置问题。信托政策是否恰当?你使用NTLM,Kerberos,PKU2U,DPA等哪个SSPI?

是否已针对您的使用场景对其进行了适当配置?

好的......在详细了解您的情景后,您是否考虑过利用自定义GINA?

http://msdn.microsoft.com/en-us/library/aa380543(v=VS.85).aspx