Конструктор WindowsIdentity выдает исключение с токеном из LogonUser - PullRequest
2 голосов
/ 24 февраля 2011

Я работаю внутри приложения командной строки, которое аутентифицирует пользователей, используя LogonUser.Функция возвращает корректно и не удается правильно (неверное имя пользователя или пароль).Когда я передаю токен, возвращенный функцией LogonUser, в конструктор WindowsIdentity(IntPtr), я получаю сообщение об ошибке:

Неверный токен для олицетворения - его нельзя дублировать.

Я попытался продублировать токен перед передачей его в конструктор WindowsIdentity с помощью функции DuplicateToken.Это также не удается.У меня включен UAC и я работаю под управлением Windows 7 x64.Запуск от имени администратора, а не администратора дает одинаковый результат.

Дополнительная информация:

  • Вход в домен
  • Использование LOGON32_LOGON_INTERACTIVE
  • Использование LOGON32_PROVIDER_DEFAULT

Ответы [ 3 ]

1 голос
/ 01 марта 2011

Это оказалось экологическим. Проблема с DNS при попытке аутентификации в домене. Сброс окна разработки исправил проблему.

1 голос
/ 27 марта 2012

У меня была такая же ошибка только в коде, скомпилированном с использованием .Net Framework 4. При компиляции со всеми предыдущими версиями не было ошибок.

этот код использовался для сбоя в .net 4:

using(WindowsIdentity identity = new WindowsIdentity(accessToken))
    context = identity.Impersonate();

Однако я обнаружил, что это работает:

context = WindowsIdentity.Impersonate(accessToken);
1 голос
/ 24 февраля 2011

Работает ли следующее для вас или воссоздает проблему?

[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);
...