0

.NetFramework 2 (IIS 7.5 の App Pool 2 Classic を使用) に ASP.NET サイトがあり、 と の混合認証を使用しBasic AuthenticateますForm Authenticate

IIS の構成は次のとおりです。

ここに画像の説明を入力

そして、匿名認証の特定のユーザーに次の名前を付けますGuest

Adminユーザーが偽装を使用するような別のユーザー名でログインする場合:

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

したがって、Web サイトを .NetFramework 4 にアップグレードし、.NET 4 の多くの機能を Web サイトに追加するまで、すべてが完璧であり、新しい問題があることがわかりました。

Admin問題は、新しいタブですばやく開くなど、いくつかのページ (3-4) を同時に開いて、場合によっては偽装されていないユーザーでログインすることです。正しく偽装された最初のページと同様にAdmin、別のページは偽装されておらず、まだGuestユーザーがいます。

これは非常に奇妙です。認証部分に変更はありません。変更点は、.NetFrameWork 4 にアップグレードすることであり、アプリケーション プールは .NetFrameWork 4 - Classic です。

.Net 2 バージョンの Web サイトでテストがあります。すべて問題ありませんが、App Pool を .NetFrameWork 4 に変更すると、問題が表示されました。

問題は、.NetFramework 4 アプリ プールで偽装するためにどのような変更が行われたかということです。

見逃したことはありますか?なにか提案を?

4

1 に答える 1

0

私はいくつかのポイントを見つけました:

1- マルチリクエストは並列処理のように動作します。ご存知のように、クラシック モードでは並列処理にいくつかの制限があります。

2- 統合モードでは、有効化にいくつかの制限がありImpersonateます。偽装を有効にするのデフォルトの動作は 500.24 エラーです。偽装を有効にする場合は、web.config に追加するInternal Server Error An ASP.NET setting has been detected that does not apply in Integrated managed pipeline mode"必要があります。したがって、エラーは発生しませんが、別の制限があります。偽装コマンドは機能しませんでした。メソッドでは、他のすべてが完全に機能しました。<validation validateIntegratedModeConfiguration="false"/><system.webServer>Begin_RequestAuthenticateRequest

この場合、IIS 7.0 の統合モードで実行される ASP.NET 2.0 アプリケーションの破壊的変更は非常に優れた記事です。

だから解決策は

Begin_Request統合モード (タグの追加が必要) に移動し、またはの代わりに他のメソッドで Impersonate を使用しますAuthenticateRequest

于 2013-09-17T12:08:23.090 に答える