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