2

Facebook からの認証を処理する HTTP モジュールがあり、クラシック パイプライン モードで正常に動作します。

ただし、統合パイプライン モードでは、モジュールが失敗する原因となっている既定のドキュメントに対する追加の要求パス スルーが表示されます。(Facebook からの) リクエストを見て、アプリにアクセスしているユーザーを取得して検証します。最初のリクエストは正常に認証されますが、投稿されたフォーム変数がない2 番目のリクエストが表示されるため、認証が失敗します。

統合パイプライン モードでは、"/" に対する http 要求により、2 つの AuthenticateRequests が連続して生成されます。

  1. AppRelativeCurrentExecutionFilePath = "~/" であるリクエスト
  2. AppRelativeCurrentExecutionFilePath = "~/default.aspx" である要求

その 2 番目の要求はすべてのフォーム値を失うため、認証に失敗します。クラシック モードでは、その 2 番目の要求のみが発生し、フォームの値が保持されます。

ここで何が起こっているのですか?

更新: これは、IIS のモジュール通知からのトレースのイメージです。私のモジュールである FBAuth は AUTHENTICATE_REQUEST を複数回見ていることに注意してください (認証用に 1 つ、認証後用に 1 つ、2 つを期待しますが、4 つ取得します)。

複数回発生したイベント

これらのイベントを繰り返し発生させない同じコードを実行している(Vista)ボックスを見つけたので、これはモジュール/フィルター構成に関係があると信じ始めています-それは期待どおりに動作します. どんな違いがあるのか​​調べてみました...

ありがとう!トム

4

2 に答える 2

1

私の解決策は、Application_BeginRequest の最後に次のコードを追加することでした。

if (Request.RawUrl.TrimEnd('/') == HostingEnvironment.ApplicationVirtualPath.TrimEnd('/'))
    Server.Transfer(Request.RawUrl+"Default.aspx", true);
于 2011-05-26T01:02:02.807 に答える
0

DefaultHttpHandler はサポートされていないため、DefaultHttpHandler のサブクラスに依存するアプリケーションは要求を処理できません。 アプリケーションが DefaultHttpHandler または DefaultHttpHandler から派生したハンドラーを使用している場合、正しく機能しません。統合モードでは、DefaultHttpHandler から派生したハンドラーは、要求を処理のために IIS に戻すことができず、代わりに要求されたリソースを静的ファイルとして提供します。統合モードでは、DefaultHttpHandler を使用しなくても、すべての要求に対して ASP.NET モジュールを実行できます。

回避策

ワイルドカード マッピングを使用して ASP.NET をすべての要求にマップし、DefaultHttpHandler 派生ハンドラーを使用して要求を IIS に戻すのではなく、モジュールを使用してすべての要求の要求処理を実行するようにアプリケーションを変更します。

うーん、またはこれが問題かもしれません。

要求処理の初期段階にある ASP.NET モジュールは、ASP.NET に入る前に IIS によって拒否された可能性のある要求を確認します。これには、BeginRequest で実行されているモジュールが含まれており、認証が必要なリソースに対する匿名の要求が表示されます。ASP.NET モジュールは任意のパイプラインで実行できます。ネイティブ IIS モジュールで使用できるステージ。このため、以前は認証段階 (認証が必要なリソースに対する匿名要求など) または ASP.NET に入る前の他の段階で拒否された可能性のある要求が、ASP.NET モジュールを実行する可能性があります。この動作は、ASP.NET モジュールがすべての要求処理段階で IIS を拡張できるようにするための仕様です。

回避策

アプリケーション コードを変更して、後で要求処理中に拒否される可能性のある要求を確認することで発生する、アプリケーション固有の問題を回避します。これには、後で要求処理中に発生するパイプライン イベントにサブスクライブするようにモジュールを変更することが含まれる場合があります。 http://learn.iis.net/page.aspx/381/aspnet-20-breaking-changes-on-iis-70/

于 2009-02-27T20:27:51.717 に答える