【发布时间】:2012-11-08 02:02:36
【问题描述】:
在这个 MSDN article 关于“如何在 ASP.NET 应用程序中实现模拟”中,他们列出了 4 种不同的方法来更改用于执行 Web 请求的帐户。不幸的是,它没有描述这些替代方案之间的差异。
我正在尝试模拟经过 IIS 身份验证的用户从他们的本地计算机上复制一些文件。当我使用 WIN32 api LogonUserA 并模拟特定用户时,它可以工作。但我需要 webapp 与许多用户一起工作(我没有可以访问每个人的文件的帐户)。
我认为简单地设置 Impersonate = "true" 并配置 IIS 应该可以工作,但有些不同。当我检查 Environment.UserName 时,它似乎在模拟正确的帐户,但我收到“访问被拒绝”错误。
有人知道这些模拟方法之间的区别吗?是否可以冒充 IIS 认证用户,然后对其进行一些文件操作?
更新:根据我收到的反馈,我需要更清楚自己面临的问题。
环境设置: IIS:禁用匿名身份验证,启用集成 Windows 身份验证 ASP.Net的web.config: authentication mode = "windows", impersonate = true, 拒绝匿名用户
假设我以“userA”的身份访问该页面:
场景 1:模拟 IIS Authenticated 用户
try{
File.Copy(srcFile, destFile); // Access Denied even though userA has access to srcFile.
} catch(Exception ex) {
...
}
场景 2:使用 LogonUser 模拟 userA
try{
// Impersonater is a wrapper around the WIN32 LogonUser API
using(Impersonater imp = new Impersonator("domain", "userA", "pwd"))
{
File.Copy(srcFile, destFile); // Works
}
} catch(Exception ex) {
...
}
在这两种情况下,我都在冒充“userA”。
【问题讨论】:
-
您是否正在尝试将文件从客户端上传到服务器?也许改用 Http Post...
-
我没有进行任何上传。一切都在 Intranet 上,我只想将文件从客户端计算机移到另一个网络位置。
-
目前还不太清楚您在哪里遇到拒绝访问错误。您是否尝试过查看安全审核日志以了解正在尝试的内容以及执行该操作的用户?
-
我在尝试进行文件复制时收到拒绝访问错误。我将更新一些示例代码来说明我的意思。
-
您是使用直通身份验证 (support.microsoft.com/kb/214806) 还是使用那里的专用帐户?此外,
srcFile在哪里?它不能在映射驱动器上,因为 IIS 根本不支持映射驱动器。
标签: c# asp.net .net iis impersonation