ASP.NET拒绝尊重我的权威.

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方法的大量控制- 不是单个过载.是否还有其他替代方法可以使用此对象来更好地控制我的凭据?

iro*_*sam 3

这听起来像是一个双跳身份验证问题。您是否尝试过向站点的默认 IIS 用户(例如 ASPNET)授予网络共享修改访问权限,并在完全不使用模拟代码的情况下运行 POST/SaveAs?如果失败,您应该查看 IIS 中的设置是否会导致服务器跃点身份验证问题。这可能是一个很好的起点:

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