1

ユーザーがアプリ内の単一のセッションにログインすることのみを許可するログイン強制アプリがあります。これは、postauthenticate 要求イベント ハンドラーで行われます。

ユーザーをログアウトする必要がある (別のセッションがある) 場合は、次のようにします。

FormsAuthentication.SignOut();
FormsAuthentication.RedirectToLoginPage();

これは長い間うまく機能しています。ここで、アプリに Web API を追加します。Web API Url にヒットすると、PostAuthentication イベントが発生し、ユーザーが別の場所でログインしていることがわかります...ただし、ログインへのリダイレクトが行われます..これは、コードが原因であると予想されます。

上記のコードを変更して を設定しResponse.StatusCode = 401、リクエストを終了しようとしました。まあ、それはうまくいきますが、asp.netは「ナイス」で、ログインページに自動リダイレクトされます。

この要求が Web API URL からのものである場合、401 で応答し、ログイン ページにリダイレクトしないようにする方法はありますか?

4

2 に答える 2

1

HttpResponse の SuppressFormsAuthenticationRedirect を true に設定すると、FormsAuthentication モジュールは 401 をキャッチしません。

于 2015-04-26T11:00:42.503 に答える
1

問題は、FormsAuthenticationModule が EndRequest ですべての送信要求をキャッチし、ステータスが 401 であり、URL が構成されたログイン場所ではない場合、ログイン場所にリダイレクトされることです。

それを修正する素晴らしい方法はありません。基本的に私は2つの方法を見てきましたが、どちらも素晴らしいものではありません:

  1. 独自の FormsAuthenticationModule を実装します。すぐに使用できるものを使用するのではなく、例外を認識して 401 を通過させる独自のものを作成してください。
  2. 401 を発行するログイン ページにロジックを追加します。インバウンド URL を確認します。URL が FormsAuthenticationModule からのリダイレクトの 1 つであるが、ユーザーが既にログインしている場合は、ログイン フォームを表示するのではなく、401 を発行します。FormsAuthModule はログイン フォームへの循環リダイレクトを行わないので、問題ありません。
于 2012-08-31T21:09:23.530 に答える