【问题标题】:Current windowsidentity same as currentrequest user identity with windows authentication当前 windowsidentity 与 currentrequest 具有 windows 身份验证的用户身份相同
【发布时间】:2016-11-17 16:19:14
【问题描述】:

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

  • system.web.httpcontext.current.user.Identity.Name 返回执行请求的用户的名称(这是预期的)
  • System.security.principal.windowsIdentifier.getCurrent.Name 返回运行应用程序的用户名(这也是预期的)

现在,我们一直在努力开发新版本的产品。我们现在发现行为发生了变化。当我们再次执行相同的测试时,httpcontext 用户名和 principal.windowsidentity.getcurrent 都会返回执行请求的用户名。

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

有没有想过在哪里寻找这种行为的原因?

编辑: 调试告诉我在执行 global.asax prerequesthandler 时身份已经有错误的值。在beginrequest中没有进行网站的冒充,当前身份是应用池身份

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

【问题讨论】:

    标签: asp.net webforms windows-authentication windows-identity


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-10-06
      • 1970-01-01
      • 2012-03-15
      • 1970-01-01
      • 2016-04-12
      • 2011-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多