我们在.NetFramework 2中有一个ASP.NET站点(在IIS 7.5中使用App Pool 2 Classic),我们使用Basic Authenticate
和Form 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
用户。
这太奇怪了,我们在身份验证部分没有任何变化。更改是我们升级到.NetFrameWork 4和App Pool是.NetFrameWork 4 - Classic。
我们在.Net 2版网站上进行了测试。一切都没问题,但我们将App Pool更改为.NetFrameWork 4并显示问题。
那么问题是.NetFramework 4应用程序池中发生了哪些变化?
我们错过了什么吗?有什么建议吗?
答案 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_Request
或AuthenticateRequest
使用模拟。