ASP.NET отказывается уважать мой авторитет. - PullRequest
14 голосов
/ 30 июля 2011

Мне удалось успешно выдать себя за пользователя.Использование LogonUser Interop, например,

    [DllImport("advapi32.dll", SetLastError = true)]
    static extern bool LogonUser(
      string principal,
      string authority,
      string password,
      LogonSessionType logonType,
      LogonProvider logonProvider,
      out IntPtr token);

Это отлично работает.Когда я иду в свое непосредственное окно и ввожу WindowsIdentity.GetCurrent().Name, олицетворенный пользователь отображается как мой CurrentUser.Когда я отпускаю этого пользователя, он возвращается к моему настоящему пользователю.Здесь нет проблем - я am подражаю.

Однако, когда я пытаюсь записать файл в общий ресурс, к которому у пользователя есть доступ, я получаю:

Access to the path [path name] denied..

Мне удалось войти в Windows вручную как пользователь, подражая мне, выполнить навигацию и записать файл в общую папку.У пользователя определенно есть права администратора для каталога, на который я нацеливаюсь.

Я разрешаю конечному пользователю загружать файл и, используя объект HttpPostedFileBase, записываю файл в этот общий ресурс.По сути, я ограничиваю олицетворение блоком кода для загрузки файла.После завершения он возвращается к первоначальному аутентифицированному пользователю LDAP, например,

 imp = Impersonation.ImpersonateUser("someuser","somepassword");
 HttpPostedFileBase hpf = Request.Files[file] as HttpPostedFileBase;
 ...
 hpf.SaveAs(path);
 Impersonation.StopImpersonating(imp);

. Путь правильный.

Когда я сохраняю файл, используя метод SaveAs, уважает ли он мойолицетворение?

Попытка записи файла под другой учетной записью, о которой я не знаю?И если да, то как я могу это изменить?

Кажется, что при использовании метода SaveAs не так много контроля - ни единой перегрузки.Есть ли другие варианты использования этого объекта, которые позволили бы мне лучше контролировать свои учетные данные?

Ответы [ 3 ]

3 голосов
/ 30 июля 2011

Звучит как проблема аутентификации двойного прыжка. Пытались ли вы предоставить сетевому ресурсу право на изменение доступа для пользователя IIS по умолчанию на вашем сайте (например, ASPNET) и вообще запустить POST / SaveAs без кода олицетворения? Если это не помогло, вы должны посмотреть, не настроены ли в IIS такие вещи, которые могут привести к проблемам аутентификации на сервере. Вот хорошее место для начала:

http://weblogs.asp.net/owscott/archive/2008/08/22/iis-windows-authentication-and-the-double-hop-issue.aspx

0 голосов
/ 06 августа 2011

Попробуйте настроить значение LogonSessionType.Я думаю, что для сохранения на сетевом ресурсе вам нужно иметь его как «Сеть», в то время как по умолчанию «Интерактивный».

Дополнительная информация: Как: использовать олицетворение и делегирование в ASP.NET 2.0

0 голосов
/ 30 июля 2011

Вы говорите «напишите файл в эту папку».Существуют отдельные разрешения для общего ресурса, чем для папки на компьютере.Вы проверили разрешения для акций?

...