ASP.NET模拟.NETFramework 2 VS .NETFrameWork 4

时间:2013-09-17 06:44:45

标签: c# asp.net authentication impersonation .net-framework-version

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

IIS中的配置是:

enter image description here

让匿名身份验证中的特定用户名为: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用户。

这太奇怪了,我们在身份验证部分没有任何变化。更改是我们升级到.NetFrameWork 4和App Pool是.NetFrameWork 4 - Classic。

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

那么问题是.NetFramework 4应用程序池中发生了哪些变化?

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

1 个答案:

答案 0 :(得分:0)

我发现了一些观点:

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

2-在集成模式下,我们在Impersonate启用时有一些限制。 Enable Impersonate的默认行为是500.24错误:Internal Server Error An ASP.NET setting has been detected that does not apply in Integrated managed pipeline mode"如果我们想要启用模拟,我们需要在web.config中将<validation validateIntegratedModeConfiguration="false"/>添加到<system.webServer>,所以我们不会收到错误,但是钢我们有另一个限制。模拟命令在Begin_Request中无效,在AuthenticateRequest方法中,其他任何工作都完美无缺。

在这种情况下,Breaking Changes for ASP.NET 2.0 applications running in Integrated mode on IIS 7.0是非常好的文章。

所以解决方案是

移至集成模式(需要添加标记)并使用任何其他方法而非Begin_RequestAuthenticateRequest使用模拟。