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