我在命令行应用程序中运行,该应用程序使用LogonUser
对用户进行身份验证。该函数正确返回,失败正确(无效的用户名或密码)。当我将LogonUser
函数返回的标记传递给WindowsIdentity(IntPtr)
构造函数时,收到错误:
模仿的令牌无效 - 它 不能重复。
我尝试在使用WindowsIdentity
函数将令牌传递到DuplicateToken
构造函数之前复制令牌。这也失败了。我有UAC,我正在运行Windows 7 x64。以管理员而非管理员身份运行会产生相同的结果。
一些额外的信息:
LOGON32_LOGON_INTERACTIVE
LOGON32_PROVIDER_DEFAULT
答案 0 :(得分:1)
以下是否适合您,或重新创建问题?
[DllImport("advapi32.dll", SetLastError = true)]
private static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken);
// ...
IntPtr token;
LogonUser(Username, Domain, Password, 8, 0, out token)
WindowsIdentity wi;
wi = new WindowsIdentity(token);
答案 1 :(得分:1)
这最终成了环保。尝试对域进行身份验证时出现DNS问题。重置开发框修复了问题。
答案 2 :(得分:1)
我只在使用.Net Framework 4编译的代码中遇到了同样的错误。使用以前的所有版本编译时没有错误。
此代码曾在.net 4中失败:
using(WindowsIdentity identity = new WindowsIdentity(accessToken))
context = identity.Impersonate();
然而,我发现这有效:
context = WindowsIdentity.Impersonate(accessToken);