gpt4 book ai didi

c# - 使用 ASP.NET 设置模拟

转载 作者:太空狗 更新时间:2023-10-29 21:48:59 25 4
gpt4 key购买 nike

为了初步了解,我创建了一个非常简单的项目,它试图计算两个目录中的文件数。不允许 User1 访问 Directory2 并且不允许 User2 访问 Directory1。由于模拟,我应该只能得到一个号码,具体取决于调用我的应用程序的用户。两个用户都设置为管理员。

因此,我在 Visual Studio 2015(在 Windows 8.1 上运行)中创建了一个新的 MVC 项目,并选择使用 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
  • “托管管道模式”是集成

关于如何改变以使这个简单的项目按预期工作有什么建议吗?

最好的问候, 卡斯滕

最佳答案

我终于设法让它工作(IIS Express 和 IIS)!如上所述,第一种方法只是一个原型(prototype)。最终目标是创建一个在服务器 A 上运行的 GUI 和一个在服务器 B 上运行的 API。两者均使用 ASP.NET 实现。

GUI 和 API 的 Web.config 得到了这些设置:

<system.web>
<authentication mode="Windows" />
<authorization>
<deny users="?" />
</authorization>
<identity impersonate="true" />
</system.web>

项目属性(选择项目后按F4)“Managed pipline mode”设置为Classic

在 SO 的某个地方,我看到了关于模拟是否也应该与 HttpClient 一起工作的讨论。据说,确实如此。好吧,它不适合我。如果您使用多种 HTTP 方法,WebClient 就没有意思了。所以我切换到 RestSharp:

RestClient client = new RestClient(baseUrl);
client.Authenticator = new NtlmAuthenticator();
  • 针对 Visual Studio 的特别说明:您必须以管理员身份启动 Visual Studio,否则模拟将无法在 IIS Express 上运行!
  • IIS 特别说明:应用程序池必须使用 Classic“托管管道模式”。
  • 特别说明(测试时):起初,API 要求我进行身份验证,但它不应该这样做。原因很简单:我的开发机器上的用户 user1 有另一个密码,然后是目标机器上的 user1...

我希望这对某人有帮助。

关于c# - 使用 ASP.NET 设置模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39571737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com