Я пытаюсь олицетворять учетную запись пользователя домена в приложении WPF, чтобы приложение могло выполнять запись в папку в сети. Пользователь домена имеет достаточные права для записи в это местоположение.
Я использую некоторый код, найденный в net для выполнения олицетворения.
По сути, он вызывает собственный метод LogonUser, который возвращает токен безопасности, затем создает новый идентификатор WindowsIdentity, передавая токен и, наконец, вызывая метод windowsIdentity.Impersonate ().
Я не получаю никаких исключений при выполнении вышеуказанной логики.
Вызов WindowsIdentity.GetCurrent () -> возвращает олицетворенную личность.
Запись в путь UNC -> исключение UnauthorizedAccess.
Итак, я проверяю объект Thread.CurrentPrincipal перед тем, как пытаться записать файл, он имеет GenericPrincipal, а не WindowsPrincipal с имитируемым WindowsIdentity.
Таким образом, при запуске приложения я установил для AppDomain.CurrentAppDomain.SetPrincipalPolicy значение PrincipalPolicy.Impersonate.
Я перезапускаю свое приложение ...
Перед моим призывом к олицетворению я могу видеть свои собственные учетные данные в Thread.CurrentPrincipal, те, которые я использую для входа на мою машину разработки и которая выполняет мою программу WPF.
Я снова пытаюсь запустить логику олицетворения, снова я вижу олицетворенную личность в WindowsIdentity.GetCurrent, все выглядит нормально, без исключений
Однако в Thread.GetCurrentPrincipal я все еще вижу свои собственные учетные данные, и если я смотрю на свойство AuthenticationType, возникает исключение UnauthorizedException (которое видно только в отладчике, оно не выбрасывается в приложении !!). Я позволил запустить код.
Опять-таки, UnauthorizedAccess при попытке записать мой файл в папку UNC.
Последнее, что я попытался, - это создать новый WindowsPrincipal с WindowsIdentity.GetCurrent ()
и я явно установил его на Thread.Current, но результат тот же.
UnauthorizedAccess при записи в местоположение UNC.
У меня нет идей:)