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

标签 asp.net ldap impersonation

我已经成功地模拟了一个用户。使用 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/

相关文章:

c# - 为什么我无法在远程计算机上使用模拟打开文件?

sql - WCF 模拟和 SQL 可信连接?

c# - 在另一台机器上模拟本地用户

c# - 具有基于角色授权的 ASP.NET Web Api

html - 如何防止 chrome 中的自动完成 "Use password for:"选项?

asp.net - 嵌套类属性未从配置 ASP.NET Core 中正确填充

active-directory - LDAP DN 不区分大小写吗?

c# - LDAP SearchResult 不包含用户属性

PHP/LDAP : Bad Search Filter (OU with Ampersand)

asp.net - QueryString 值内的 "&"