2009-05-11 7 views
2

Я пытаюсь олицетворять учетную запись пользователя домена в приложении WPF, чтобы приложение могло писать в папку в сети. У пользователя домена есть достаточные права на запись в это место. Я использую код, найденный на net, для выполнения олицетворения.Выдающийся пользователь домена в WPF - UnauthorizedAccess

В основном, он вызывает собственный метод LogonUser, который возвращает токен безопасности, а затем создает новый идентификатор WindowsIdentity, передающий токен и, наконец, вызывающий метод windowsIdentity.Impersonate(). У меня нет исключений, выполняющихся над логикой.

Вызов WindowsIdentity.GetCurrent() -> возвращает личность.

Запись на UNC-путь -> Неавторизованное исключение доступа.

Итак, я проверяю объект 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-адрес.

Я из идей :)

ответ

0

Принадлежит ли машина с сетевым ресурсом в домене? Пробовал ли вы использовать общий доступ к сети с помощью этой учетной записи домена? Например, используя «Run As ...».

В функции LogonUser при использовании входа в систему используйте флаг LOGON32_LOGON_NETWORK. Также, чтобы увидеть, действительно ли произошло олицетворение, попробуйте включить аудит событий входа/выхода из политики безопасности (info link)

+0

Hi Vadmyst, Спасибо за предложение! Я пробовал флаг LOGON32_LOGON_NETWORK и флаг LOGON32_LOGON_NETWORK_CLEARTEXT, Оба результата приводят к одинаковому поведению, несанкционированному доступу. Аудит на сервере, который я пытаюсь получить, показывает успешные события входа/выхода из системы с учетной записью домена, которую я использую. Если я сопоставляю сетевую папку с учетными данными учетной записи домена, у меня есть полный контроль над папкой, чтение/запись ... – 2009-05-12 09:10:31