Geo*_*ton 14 asp.net impersonation ldap
我成功地冒充了用户.使用LogonUser Interop,例如
[DllImport("advapi32.dll", SetLastError = true)]
static extern bool LogonUser(
string principal,
string authority,
string password,
LogonSessionType logonType,
LogonProvider logonProvider,
out IntPtr token);
Run Code Online (Sandbox Code Playgroud)
这很好用.当我进入我的即时窗口并进入时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);
Run Code Online (Sandbox Code Playgroud)
路径是正确的.
当我使用该SaveAs方法保存文件时,它是否尊重我的模仿?
它是否试图在另一个我不知道的帐户下写文件?如果是这样,我该如何改变呢?
似乎没有使用该SaveAs方法的大量控制- 不是单个过载.是否还有其他替代方法可以使用此对象来更好地控制我的凭据?
这听起来像是一个双跳身份验证问题。您是否尝试过向站点的默认 IIS 用户(例如 ASPNET)授予网络共享修改访问权限,并在完全不使用模拟代码的情况下运行 POST/SaveAs?如果失败,您应该查看 IIS 中的设置是否会导致服务器跃点身份验证问题。这可能是一个很好的起点: