ProtectedData.Unprotect() после Impersonate()

Следующий код не работает:

IntPtr token = Win32Dll.LogonUser(“user1”, “mydomain”, “password1”);
WindowsIdentity id = new WindowsIdentity(token);
WindowsImpersonationContext ic = id.Impersonate();
byte[] unprotectedBytes = ProtectedData.Unprotect(passwordBytes, null, DataProtectionScope.CurrentUser);
password = Encoding.Unicode.GetString(unprotectedBytes);
ic.Undo();

Пароль не расшифровывается.

MSDN говорит

"Если вы используете этот метод во время олицетворения, вы можете получить следующую ошибку: " Ключ недопустим для использования в указанном состоянии."Эту ошибку можно предотвратить, загрузив профиль пользователя, которого вы хотите выдать, перед вызовом метода".

2 ответа

Вот что происходит: для работы DPAPI ему необходим ключевой материал пользователя, который частично получен из учетных данных пользователя. Эти данные хранятся в профиле пользователя. Вот почему процесс не запускается, так как пользователь должен загрузить профиль пользователя.

Вы должны вызвать UnloadUserProfile(), используя данные, возвращаемые LoadUserProfile()

вот что вам нужно сделать:

LogonUser ()
Олицетворять ()
LoadUserProfile()
Шифрование ()
UnloadUserProfile()
RevertImpersonation () (Отменить () в.NET)

Вы должны проверять ошибки, используя GetLastError(), на каждом этапе.

Обратите внимание, что для всех этих вещей в основном требуется, чтобы процесс был учетной записью администратора. Вам нужны права на резервное копирование и восстановление, чтобы загрузить профиль пользователя. Если при вызове LoadUserProfile вы получаете привилегию не удерживается ошибка, то вам необходимо:

а) убедитесь, что учетная запись приложения имеет резервное копирование и восстановление привилегий
б) привилегии включены, по умолчанию они не включены.

Вы можете активировать привилегии с помощью AdjustTokenPrivileges () http://msdn.microsoft.com/en-us/library/aa375202(VS.85).aspx

Сам не пробовал, но вы можете попробовать использовать неуправляемый вызов API LoadUserProfile. Для получения дополнительной информации, проверьте здесь.

Есть несколько связанных с этим вопросов.

Другие вопросы по тегам