我已经成功地模拟了一个用户。使用 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
似乎没有太多控制。方法——不是一个重载。是否有任何其他替代方法可以让我更好地控制我的凭据?
最佳答案
这听起来像是一个双跳认证问题。您是否尝试过让网络共享修改访问您站点的默认 IIS 用户(例如 ASPNET)并在没有模拟代码的情况下运行 POST/SaveAs?如果失败,您应该查看是否在 IIS 中设置了可能导致服务器跃点身份验证问题的设置。这里可能是一个很好的起点:
http://weblogs.asp.net/owscott/archive/2008/08/22/iis-windows-authentication-and-the-double-hop-issue.aspx
关于ASP.NET 拒绝尊重我的权威。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6878560/