当前windowsidentity与currentrequest用户身份相同,具有Windows身份验证

时间:2016-11-17 16:19:15

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

我对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时身份已经有错误的值。在开始请求中,尚未执行模拟网站,并且当前标识是应用程序池标识

EDIT2: 它似乎是特定于服务器的。出于某种原因,旧版本在开发机器上正常工作,但新版本没有。但是,新版本DOES在部署服务器上正常工作(我们的每日构建)。任何人都有关于可能原因的指示吗?

1 个答案:

答案 0 :(得分:1)

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

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

相关问题