Car*_*nke 7 c# asp.net impersonation
为了初步了解,我创建了一个非常简单的项目,它试图计算两个目录中的文件数.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();
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我得到了例外情况"未提供所需的模拟级别,或者提供的模拟级别无效." 有些人声称这个解决了他们的问题: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>
Run Code Online (Sandbox Code Playgroud)
我的项目设置是
falsetrueIntegrated有关改变什么的建议,使这个简单的项目按预期工作?
最好的问候,Carsten
我终于让它工作了(IIS Express 和 IIS)!如上所述,第一种方法只是原型。最终目标是创建一个在服务器 A 上运行的 GUI 和一个在服务器 B 上运行的 API。两者都使用 ASP.NET 实现。
GUIWeb.config和 API 的设置如下:
<system.web>
<authentication mode="Windows" />
<authorization>
<deny users="?" />
</authorization>
<identity impersonate="true" />
</system.web>
Run Code Online (Sandbox Code Playgroud)
项目属性(F4选择项目后按)“托管管道模式”设置为Classic。
在某处,我看到了关于模拟是否HttpClient也应该起作用的讨论。据说,确实如此。好吧,它不适合我。WebClient如果您使用多种 HTTP 方法,那就没有什么乐趣了。所以我改用 RestSharp:
RestClient client = new RestClient(baseUrl);
client.Authenticator = new NtlmAuthenticator();
Run Code Online (Sandbox Code Playgroud)
Classic“托管管道模式”。user1我的开发计算机上的用户有另一个密码,然后是user1我的目标计算机上的密码......我希望这可以帮助别人。
| 归档时间: |
|
| 查看次数: |
1058 次 |
| 最近记录: |