5

Web アプリケーションがあり、Chrome を優先ブラウザとして使用している一部のユーザーは、アプリケーションからログアウトしたときに次のエラーを受け取り、再度ログインしようとします。

"このウェブページにはリダイレクトループが含まれてい"。

私の Web アプリケーションはフォーム認証を使用しておりFormAuthenticationModule、ユーザーをアプリケーションのログイン ページにリダイレクトするため、この方法は使用できません。

<customErrors mode="On" defaultRedirect="~/MyErrorPage.aspx" >

    <error statusCode="401" redirect="~/NoAccess.aspx"/>

</customErrors>

代わりに、以下をPage_Loadmy のイベントに追加しましたLoginPage

if (Request.IsAuthenticated && !string.IsNullOrEmpty(Request.QueryString["ReturnUrl"]))
{
    Response.Redirect("~/NoAccess.aspx");
}

ただし、このアプローチを追加したため、ユーザーは「リダイレクト ループ」エラーを受け取るようです。

Cookie をクリアした後、すべて問題ないように見えますが、問題が再び発生します。

コードに追加できる恒久的な修正はありますか、またはこの問題の発生を防ぐために他にできることはありますか?

4

4 に答える 4

7

web.configこれをファイルに追加してみてください:

  <location path="NoAccess.aspx">
    <system.web>
      <authorization>
        <allow users="?"/>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>

これにより、このページの承認がオフになり、ループが停止するはずです。

これを追加することもできます:

  <location path="Login.aspx">
    <system.web>
      <authorization>
        <deny users="?"/>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>

これにより、すでに認証されているすべてのユーザーに対して、ログイン ページへのアクセスが拒否されます。これら 2 つを組み合わせると、すべてのリダイレクトにカスタム エラーを追加できるようになります。

無許可アクセス用のディレクトリ (例: public/) を作成し、すべてのエラー ページ (許可を必要としないもの) 内に配置することも検討してください。次に、次のことができます。

  <location path="public">
    <system.web>
      <authorization>
        <allow users="?"/>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>

場所の詳細については、こちらをご覧ください。承認の詳細については、こちらを参照してください。

于 2013-04-09T06:23:44.697 に答える
2

非常によく似た問題があり、IIS で解決しました。Authentication機能で、他のすべてを有効にAnonymous Authenticationして無効にします。最終的にこれは IIS や ASP.NET ではなく、認証ロジックを管理するアプリケーションであるため、これは理にかなっています。しかし、明らかに、このソリューションは、@Grzegorz が提案したように、公開ページへのエレガントなアクセスをサポートしていません。

于 2014-05-11T09:58:00.903 に答える
1

The request filtering module is configured to deny a request where the query string is too long.認証が個々のユーザー アカウントに設定されている Visual Studio 2013 Web サイトのエラー メッセージが表示されるリダイレクト ループもありました。

要求された URL は の長いバージョンだっhttp://localhost:52266/Account/Login?ReturnUrl=%2FAccount%2FLogin%3FReturnUrl%3D%252FAccount%252FLogin%253FReturnUrl....たので、明らかに継続的にログイン ページにリダイレクトされ、そのたびに戻り URL が追加されていました。

問題のあるループを見つけようとしているブレークポイントの量は、何もトリガーされなかったため、違いを生むようには見えませんでした。

最後に、私は次のことを行いました:

  • プロジェクトのプロパティを見つけます。これを行うには、プロジェクト (ソリューションではない) を選択し、[プロパティ] ウィンドウを表示します (右クリックして [プロパティ] を選択しないでください。そうしないと、見つかりません)。
  • に設定Anonymous AuthenticationEnabledます。
  • に設定Windows AuthenticationDisabledます。

プロジェクトを開始すると、デフォルトのページが表示され、追加したブレークポイントが機能し始めるはずです。

于 2015-02-25T17:07:02.463 に答える