【发布时间】:2011-10-16 06:04:24
【问题描述】:
我成功地模拟了一个用户。使用 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。当我释放这个用户时,它会回到我的真实用户。没问题 - 我在 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 方法似乎没有太多的控制——不是一个单一的重载。是否有任何其他替代方法可以让我更好地控制我的凭据?
【问题讨论】:
-
你拼错了权威! ;)
-
您是否查看了目标机器的事件日志以查看是否有任何访问被拒绝或登录错误?
-
您是否按照我的建议调查了双跳?
-
@ironsam 我们的基础架构团队现在正在调查这个问题。如果是这样,我会接受你的回答。谢谢!
标签: asp.net ldap impersonation