我正在尝试模拟其他域上的用户,以便查询该域。有关背景信息,请参阅Accessing user info from a one way trust。
当我使用本地域用户时,我的模拟正常工作。当我指定目标域(也是通过LDAPS端口636)时,它不起作用。我的模拟返回null。
我的假冒代码
public static WindowsImpersonationContext ImpersonateUser(ConnectionCredentials user)
{
WindowsIdentity tempWindowsIdentity;
IntPtr token = IntPtr.Zero;
IntPtr tokenDuplicate = IntPtr.Zero;
if (RevertToSelf())
{
if (LogonUser(user.UserName, user.Domain, user.Password, LOGON32_LOGON_INTERACTIVE,
LOGON32_PROVIDER_DEFAULT, ref token) != 0)
{
if (DuplicateToken(token, 2, ref tokenDuplicate) != 0)
{
tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
impersonationContext = tempWindowsIdentity.Impersonate();
if (impersonationContext != null)
{
CloseHandle(token);
CloseHandle(tokenDuplicate);
return impersonationContext;
}
}
}
}
if (token != IntPtr.Zero)
CloseHandle(token);
if (tokenDuplicate != IntPtr.Zero)
CloseHandle(tokenDuplicate);
return impersonationContext;
}
有什么想法吗? 感谢。
答案 0 :(得分:0)
我的问题是我发送的用户名为username @ domain,并指定了域名。如果用户名包含域名,则LogonUser的域名必须为空
if (LogonUser(user.UserName, null, user.Password, LOGON32_LOGON_INTERACTIVE,
LOGON32_PROVIDER_DEFAULT, ref token) != 0)
谢谢!