【发布时间】:2017-01-27 01:24:27
【问题描述】:
首先,我创建了一个非常简单的项目,它试图计算两个目录中的文件数。不允许User1 访问Directory2 和不允许User2 访问Directory1。由于冒充,我应该只得到一个号码,具体取决于调用我的应用程序的用户。两个用户都设置为管理员。
所以我在 Visual Studio 2015 中创建了一个新的 MVC 项目(在 Windows 8.1 上运行)并选择使用 Windows 身份验证。一旦应用程序启动并运行(在 ISS Express 中),我在我的机器上切换到 User1(没有 Active Directory)并在 Internet Explorer 中调用该网站(是的,在设置中启用了“集成 Windows 身份验证”) .通过此设置,HttpContext.User.Identity 中的用户是 User1,WindowsIdentity.GetCurrent() 是我的开发用户,即我在 Visual Studio 中使用的用户。
我也尝试过手动模拟:
WindowsIdentity winId = (WindowsIdentity)User.Identity;
WindowsImpersonationContext ctx = null;
try
{
ctx = winId.Impersonate();
// GetNumbers() tries to get the number of files for both directories
numbers = GetNumbers();
}
catch (Exception e)
{
}
finally
{
if (ctx != null)
{
ctx.Undo();
}
}
不幸的是,我收到异常“未提供所需的模拟级别,或者提供的模拟级别无效”。有些人声称这个解决了他们的问题:https://kc.mcafee.com/corporate/index?page=content&id=KB56194 不适合我。我已将User1 和我自己的用户添加到列表中并重新启动计算机。没有变化。
唯一给我一点希望的是模拟单独登录,如https://msdn.microsoft.com/en-us/library/ms998351.aspx#paght000023_impersonatingusinglogonuser所述。缺点很明显:我必须有用户的密码,如果用户我为什么要重新登录已经为我做了。
虽然这是一个新项目,我没有进行重大更改,但更多信息仅用于完整性检查...
我的Web.config
<authentication mode="Windows" />
<authorization>
<deny users="?" />
</authorization>
我的项目设置是
- “匿名认证”是
false - “Windows 身份验证”为
true - “托管管道模式”为
Integrated
有什么建议可以让这个简单的项目按预期工作吗?
最好的问候, 卡斯滕
【问题讨论】:
标签: c# asp.net impersonation