在这篇关于“如何在 ASP.NET 应用程序中实现模拟”的MSDN文章中,他们列出了 4 种不同的方法来更改用于执行 Web 请求的帐户。不幸的是,它没有描述这些替代方案之间的差异。
我正在尝试模拟经过 IIS 身份验证的用户来从他们的本地计算机上复制一些文件。当我使用 WIN32 apiLogonUserA
并模拟特定用户时,它可以工作。但我需要 webapp 与许多用户一起工作(我没有可以访问每个人的文件的帐户)。
我认为简单地设置 Impersonate = "true" 并配置 IIS 应该可以工作,但有些不同。当我检查 Environment.UserName 时,它似乎在模拟正确的帐户,但我收到“访问被拒绝”错误。
有人知道这些模拟方法之间的区别吗?是否可以模拟经过 IIS 身份验证的用户,然后对其进行一些文件操作?
更新:根据我收到的反馈,我需要更清楚地了解我所面临的问题。
环境设置:IIS:禁用匿名身份验证,启用集成windows身份验证ASP.Net的web.config:身份验证模式=“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”。