IIS 7 Windows身份validation错误的用户

IIS 7,集成应用程序池,标识设置为NetworkService

我们最近把一个asp.net MVC 3移到了我们的生产环境中。 应用程序使用Windows身份validation。 生产环境是在IIS 7上运行Win 2008的Web场上设置的(不确定是否为R2)。 有两台服务器configuration为运行Web应用程序。

我们已经有两次(相隔约一周),用户被authentication为不同的用户,而不是他们自己。 检查IIS日志,似乎在某种程度上,所有的请求都被authentication为一个特定的用户。 在日志中还有X-ARR-LOG的条目,这显然是应用程序请求路由模块(不知道是否相关,但更多的信息可能会有所帮助..)。 我的networking背景不是很强大,但我们的networking资源并没有find任何运气。

是否有任何诊断工具可以运行,以查看问题可能来自哪里? 是否有可能在Web场上错误地configuration了某些可能导致此问题的内容?

一个重要的因素是,在IIS日志中,有一个不通过asp.netpipe道的简单html页面的请求,以及上述用户请求的日志中的请求。 所以看起来问题出现之后,所有请求似乎都在相同的用户帐户下进行身份validation。

欣赏任何帮助,你可以提供的提示

更新:

详细说明我们如何确定不同用户作为一个用户进行身份validation…

在IIS日志中,我们正在查看根据文档,由IIS设置的cs-username列。 我们可以看到来自不同IP地址的不同请求,在不同的地方有相同的cs-username。 在日志中,所有请求都有不同的cs-username,直到突然间,所有的请求都来自同一个cs-username。 我们已经能够通过将服务器带出服务器场并回收应用程序池来重置此问题。 不清楚具体哪一个帮助我们“重置”了这个问题。 还提到一些请求是一个纯HTML页面,这不通过的asp.netpipe道,(相信它被监控工具,因为它被称为sitecheck.html使用),这些请求突然有相同的cs-username。 此外,应用程序本身使用WindowsIdentity来显示用户特定的数据,这就是导致我们更深入地研究问题的原因。

https://stackoverflow.com/questions/7410473/asp-net-application-iis7-sessionstate-is-crossing-over-multiple-users-in-differe

http://xprog.blogspot.com/2011/03/iis7-sessions-getting-crossed-mixed-up.html

会话问题与IIS7
http://forums.iis.net/t/1154347.aspx

IIS7会话得到交叉/混合/复制
http://lionsden.co.il/codeden/?p=446

症状

用户报告在他们login帐户时看到不属于他们的数据。 日志显示,将近10%的用户被分配了其他用户会话的副本。 整个会话对象被复制,包括会话variables和会话ID。 一旦重复,个别会话可以修改而不会影响其他(即放弃一个没有杀死另一个)。

为了find问题的实例,我将Request.RemoteHost(发出请求的计算机的IP地址)存储在会话variables中。 在每个请求的开始,我检查确保会话的IP匹配当前请求的IP。

什么不是

如果用户重置他的路由器/调制解调器,IP可能会自然改变。 事实并非如此,因为事情经常发生。 此外,确认了一个用户的数据与另一个用户的数据交叉。 最后,一些IP对不只是在不同的电脑上,而是在不同的国家。

如果在WebApp中使用静态/共享variables,则会话variables也可能会停止唯一。 这也不是这种情况,因为我存储在会话中的IP地址只能写入一次,从请求中读取,之后只读取以便与请求进行比较。 这也被排除,因为SessionID也是重复的,并且是只读值。

什么是

这是IIS7中的一个function/错误。 这个最新版本的IIS引入了一些新的cachingfunction。

IIS7自动caching静态内容,如HTML页面,图像和样式表。
IIS7现在也可以cachingdynamic内容。

如果dynamic内容是一个页面,例如dynamic生成的图片库,或基于浏览器的文化dynamic生成的页面,cachingdynamic内容就非常棒。 然而,在这个线程中,IIS Core的高级软件devise工程师Anil Ruia解释说: “你不应该为任何响应启用输出caching在会话状态“。

如果生成内容的页面取决于会话状态,则会将会话对象与页面的其余部分一起caching。 下一个要通过的用户最终将拉取caching的会话,而不是获取新的会话。 当我检查我们的设置,我发现它被设置为caching所有.aspx页面三分钟,包括访问会话的许多页面。

解决scheme

编辑caching规则

在IIS7中,使用依赖于会话状态的asp.net页面禁用任何目录中的.aspx页面的caching。 去做这个:

Run the Server Management console. Navigate to Roles -> Web Server (IIS) -> Internet Information Services. Select the site you wish to modify. Select the folder that contains the .aspx pages you need to turn caching off for. In the Feature View, double-click “Output Caching”. If there is a rule there already for the .aspx extension double click it. Otherwise right click and select “Add…” Enter .aspx for the “File name extension” Check “User-mode caching” Select “Prevent all caching” Check “Kernel-mode caching” Select “Prevent all caching” Click OK Close the Server management Console