【问题标题】:ASP.NET Impersonate in .NETFramework 2 VS .NETFrameWork 4.NET Framework 2 VS .NET FrameWork 4 中的 ASP.NET 模拟
【发布时间】:2013-09-21 11:39:15
【问题描述】:

我们在 .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 发生了什么变化?

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

【问题讨论】:

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


    【解决方案1】:

    我发现了一些要点:

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

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

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

    所以解决办法是

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

    【讨论】:

      猜你喜欢
      • 2012-04-10
      • 2017-10-12
      • 1970-01-01
      • 1970-01-01
      • 2011-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多