2016-11-17 137 views
1

我有一个奇怪的问题与Windows身份验证。我们有一个asp.net webforms应用程序,其中我们有一个使用Windows身份验证的文件夹。此文件夹已针对IIS中的Windows身份验证正确配置。该应用程序通过web.config使用.net模拟。当我们使用Windows身份验证的浏览到一个页面此文件夹中:当前windowsidentity与当前的请求用户身份一样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时,行为保持正确(这两个属性显示不同的标识)似乎没有区别。

想到哪里寻找这种行为的原因?

编辑: 调试告诉我,执行global.asax prerequesthandler时,身份已经有错误的值。在开始请求时,网站的模仿尚未执行,且当前标识是应用程序池标识

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

回答

1

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

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

相关问题