因此,我在运行 Windows Server 2003 和 IIS 6 的生产服务器上遇到了代码问题。
我正在尝试模拟一个域帐户,该帐户在本地运行良好。
虽然当它在服务器上时,函数模拟用户失败,即返回 false:
private bool impersonateValidUser(String userName, String domain, String password)
{
WindowsIdentity tempWindowsIdentity;
IntPtr token = IntPtr.Zero;
IntPtr tokenDuplicate = IntPtr.Zero;
if (RevertToSelf())
{
if (LogonUserA(userName, domain, 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 true;
}
}
}
}
if (token != IntPtr.Zero)
CloseHandle(token);
if (tokenDuplicate != IntPtr.Zero)
CloseHandle(tokenDuplicate);
return false;
}
请注意,代码不会崩溃 - 它只是返回 false。以前有没有人经历过这种情况并且对我应该开始看什么有任何想法?我假设 IIS 配置在这里起作用,但可能需要数周时间才能找到导致此问题的小问题。
我可以使用我试图模拟的帐户在服务器上安装驱动器,因此帐户用户/密码组合很好,可用于在 Windows 资源管理器中进行身份验证。