0

我们在 .NetFramework 2 中有一个 ASP.NET 站点(在 IIS 7.5 中有 App Pool 2 Classic),我们使用混合身份验证Basic AuthenticateForm Authenticate.

IIS中的配置是:

在此处输入图像描述

并在匿名身份验证中有特定用户名为:Guest

当用户使用另一个用户名登录时,例如Admin我们使用模拟:

string Token = GetSpecificTokenOfCurrentUser();
System.Security.Principal.WindowsIdentity WinUser = (WindowsIdentity) HttpContext.Current.Application["User_"+Token];
WinUser.Impersonate();

因此,在我们将网站升级到 .NetFramework 4 并将 .NET 4 中的许多功能添加到网站之前,一切都是完美的,我们认为我们遇到了一个新问题。

问题是用户登录Admin并同时打开一些页面(3-4),比如在新标签中快速打开,在某些情况下用户没有被冒充。就像第一个页面被正确模拟到Admin但另一个页面没有被模拟并且仍然有Guest用户。

这太奇怪了,我们在 Authentication Part 中没有任何变化。变化是我们升级到 .NetFrameWork 4 并且 App Pool 是 .NetFrameWork 4 - Classic。

我们在 .Net 2 版本的网站中进行了测试。一切正常,但我们将 App Pool 更改为 .NetFrameWork 4 并显示问题。

所以问题是 .NetFramework 4 App Pool to Impersonate 发生了什么变化?

有什么我们错过的吗?有什么建议吗?

4

1 回答 1

0

我发现了一些要点:

1- 多请求的行为类似于并行处理,如您所知,在经典模式下,我们对并行性有一些限制。

Impersonate2- 在集成模式下,我们在启用中有一些限制。Enable Impersonate 的默认行为是 500.24 Error: Internal Server Error An ASP.NET setting has been detected that does not apply in Integrated managed pipeline mode"if we want enable impersonate we need to add <validation validateIntegratedModeConfiguration="false"/>to <system.webServer>in web.config, 所以我们没有收到错误,但是我们有另一个限制。模拟命令在Begin_RequestAnd 在AuthenticateRequest方法中不起作用,其他任何东西都可以正常工作。

在这种情况下,在 IIS 7.0 上以集成模式运行的 ASP.NET 2.0 应用程序的重大更改是非常好的文章。

所以解决方案是

移动到集成模式(需要添加标签)并在任何其他方法中使用 Impersonate 而不是Begin_Requestor AuthenticateRequest

于 2013-09-17T12:08:23.090 回答