ASP.NET отказывается уважать мои полномочия.

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

    [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. Когда я освобождаю этого пользователя, он возвращается к моему реальному пользователю. Здесь нет проблем - я олицетворяю себя.

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

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, а не одной перегрузки. Существуют ли какие-либо другие альтернативы использованию этого объекта, которые позволили бы мне больше контролировать мои учетные данные?

Ответы

Ответ 1

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

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

Ответ 2

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