6

私は独自の認証システム(https://bitbucket.org/anton_gogolev/octalforty-structural)を持っており、標準のASP.NETのものを使用していません(<authentication mode="None" />)。

プレーンIHttpModulesを使用してその仕事をします:BeginRequest着信Cookieとセットを検査HttpContext.Current.UserThread.CurrentPrincipal、認証が成功すると

Thread.CurrentPrincipal = HttpContext.Current.User = 
    new GenericPrincipal(tokenIdentity,new string[] { });

一方EndRequest、認証されたユーザーに必要なすべてのCookieを発行します。

これは数か月間正常に機能していますが、一部のシステムでは(実際に機能するシステムとどのように異なるのかわかりません)、ASP.NETはの値を失い、HttpContext.Current.Userデフォルト値に置き換えているようです(に設定してGenericPrincipal集約GenericIdentityするなど)。IsAuthenticatedfalse

だから問題は、どうやってそしてなぜHttpContext.Current.User迷子になっているのかということです。

4

1 に答える 1

3

BeginRequestの後にHttpContext.Current.Userを変更している別のモジュールがあるようです。代わりにPostAuthenticateRequestで設定することをお勧めします。

以前、ASP.NETでRoleManagerモジュールを有効にしたときにこの問題が発生しました。web.configのsystem.webセクションに以下を追加すると修正されました。

<httpModules>
     <remove name="RoleManager"/>
</httpModules>

これを修正するために私がしたことについてのいくつかの増幅情報があります:

1)他にどのモジュールが実行されているかを把握します。これを行うためのコードを提供する記事があります。

2)HttpContext.Current.Userを正しい場所に設定していることを確認します。BeginRequestはフックするのに適した場所ではありません。通常、PostAuthenticateRequestが最適です(そして推奨されます)。別のモジュールもPostAuthenticateRequestを使用していて、それがたまたまあなたの後に実行されている場合、これは問題を防ぐことはできませんが、多くの場合、問題は解決します(上記のweb.configスニペットを使用してください)。

3)インストールされている各モジュールを選択的に無効にし、カスタムPrincipalオブジェクトが上書きされなくなるまでアプリケーションをテストします。

于 2012-12-11T17:14:42.570 に答える