当前 windows 身份与具有 windows 身份验证的当前请求用户身份相同

Current windowsidentity same as currentrequest user identity with windows authentication

我在 windows 身份验证方面遇到了一个奇怪的问题。我们有一个 asp.net webforms 应用程序,其中有一个文件夹使用 windows 身份验证。此文件夹已正确配置为在 IIS 中进行 windows 身份验证。该应用程序通过 web.config 使用 .net 模拟。当我们使用 windows 身份验证导航到此文件夹中的页面时:

现在我们已经为产品的新版本开发了很长时间。现在我们发现行为发生了变化。当我们再次执行相同的测试时,httpcontext 用户名和 principal.windowsidentity.getcurrent return 执行请求的用户名。

我们已经检查了所有相关代码,我们似乎找不到与此行为有关的任何差异。我们在新版本中将应用程序从 .Net 4.0 转换为 .Net 4.5.2,但是,当我们将旧版本转换为 .Net 4.5.2 时,行为保持正确(2 个属性显示不同的标识),因此不会好像没什么区别。

想知道在哪里可以找到这种行为的原因吗?

编辑: 调试告诉我在执行 global.asax prerequesthandler 时身份已经有错误的值。 beginrequest中还没有模拟网站,当前身份是app pool identity

编辑2: 它似乎是特定于服务器的。由于某种原因,旧版本在开发机器上可以正常工作,但新版本不能。但是,新版本确实可以在部署服务器(我们的日常构建)上正常工作。有人对可能的原因有任何指示吗?

好的,我发现了问题。问题是 IIS 使用 windows 身份验证向文件夹添加了 web.config,它启用了对文件夹的模拟。当在同一个文件夹上同时启用windows身份验证和模拟时,windows身份和请求身份都是同一用户的行为是正确的。

我们需要的情况可以通过启用 windows 身份验证,但禁用文件夹模拟来实现。在这种情况下,windows 身份是默认网站的用户,请求身份是访问页面的用户的 windows 身份