6

1 つのページで認証が不要になるように、web.config に例外を設定しようとしています。ただし、それでもログイン ページにリダイレクトされます。

問題は、 web.config のセットアップ方法ではありません。なんで?私たちのシステムには (良くも悪くも) web.config 以外にもたくさんのインストルメンテーションがあります。global.asax とカスタム HttpHandlers があります。コード ベースはそれほど大きくありませんが、リダイレクトには多くの潜在的な原因があります。

私が知りたいのは、リダイレクトの原因を最もよく判断する方法です。どのコードがリダイレクトをトリガーしたかを調べる方法はありますか?

4

6 に答える 6

4

アプリをデバッグできる場合は、global.asaxのHttpApplication.BeginRequestから開始し、System.Web の参照ソースをステップ実行するのが強引な方法です。

または、HttpResponse.Redirect(string, bool) にブレークポイントを設定し、コール スタックに従います。ランタイムが要求をリダイレクトするために使用する他の方法はないと思います。

それでも問題が解決しない場合 (またはデバッグできない場合)、ブルート フォース メソッドは多くのコードを通過する可能性が高いため、問題はセキュリティに関連しているように思われるため、おそらく HttpApplication をフックすることができます。AuthenticateRequest と HttpApplication。AuthorizeRequest (およびそれに関連付けられた Post* イベント) と、そこにあるものがどのように見えるかを確認します。

フォーム認証を使用している場合、FormsAuthenticationModule が HttpApplication.EndRequest でステータス コード 401 を検索して、リクエストをリダイレクトするかどうかを決定することをたまたま知っています。401 (アクセスが拒否されました) を設定すると、ブラウザに返される 401 ではなく、リダイレクトが発生します。

于 2008-11-18T19:39:45.213 に答える
1

認証を必要とする asp.net ページに対してリクエストが行われると、asp.net は、デフォルトで元のリクエストされたページを識別する ReturnUrl クエリ文字列引数を指定して、指定されたログイン ページにリダイレクトします。この ReturnUrl は構成可能ですが、構成を変更していない場合、存在すると認証が失敗したことが示されます。

この場合、ページの認証設定のトラブルシューティングに集中する必要があります。ゴードンベルの答えはこれに適しています。

<system.web>
...
</system.web>

<location path="NoAuthNeeded.aspx">
    <system.web>
        <authorization>
        <allow roles="*" />
        <allow roles="?" />
        </authorization>
    </system.web>
</location>
于 2008-11-18T19:15:57.290 に答える
1

また、これが本番アプリでのみ発生している場合は、WinDBG を使用して何が起こっているかを確認できる場合があります。大まかにこの記事に従って、次のことを行います。

  • WinDBG を起動し、w3wp プロセスにアタッチします。
  • WinDBG はブレークポイントになるので.loadby sos mscorwks、SOS モジュールをロードする a を実行します
  • sxe clrCLR 例外のブレークポイントに入力する
  • 続けてタイプgする

これで、例外が発生するとアプリが壊れます。通常、Response.Redirect は ThreadAbortException をスローするため、簡単に中断できる可能性があります。次に、aを実行し!printexceptionてスタック トレースを取得します。~*e!clrstackまた、WinDBG foo が現在実行中のすべてのスレッドのマネージド スタックを表示するのに失敗していない場合も実行できます。

侵入している間は w3wp プロセスがフリーズすることに注意してください。

代わりに別の方法を使用できることを願っていますが、他のすべてが失敗した場合は、これが開始に役立つ可能性があります.

于 2008-11-18T19:49:15.053 に答える
0

トレースをオンにしてみましたか? それは役立つかもしれません。

次のように、認証を必要としないページをどのように指定していますか。

<system.web>
...
</system.web>

<location path="NoAuthNeeded.aspx">
    <system.web>
        <authorization>
        <allow roles="*" />
        <allow roles="?" />
        </authorization>
    </system.web>
</location>
于 2008-11-18T18:43:47.883 に答える
0

各 HTTP ハンドラーの先頭にブレークポイントを配置し、リダイレクトが発生する前に最後に呼び出されたハンドラーを確認します。おそらくその中に問題の原因が見つかるでしょう。

于 2008-11-18T19:36:26.453 に答える