これがPhilHaackがブログに書いたものです
投稿からの抜粋:
可能な解決策
Webで見たいくつかの可能な解決策を取り上げてから、私が好む解決策を紹介します。これらの他の解決策が間違っているわけではありませんが、場合によっては正しいだけです。
フォーム認証を削除する
FormsAuthが必要ない場合、この投稿が示唆するように、1つの簡単な解決策はフォーム認証モジュールを削除することです。これは、ASP.NETを使用してWeb APIサービスをホストすることが唯一の目的であり、フォーム認証を必要としない場合に最適なソリューションです。ただし、アプリがWebアプリケーションとWebサービスの両方である場合、これは優れたソリューションではありません。
HttpModuleを登録して、リダイレクトを401に変換します
このブログ投稿では、302リクエストを401に変換するHTTPモジュールの登録を提案しています。このアプローチには2つの問題があります。1つ目は、リダイレクトが正当であり、FormsAuthの結果ではない場合を破ることです。2つ目は、HttpModuleを手動で構成する必要があることです。
Install-Package MembershipService.Mvc
私の同僚であるSteveSandersonは、彼のMembershipService.MvcパッケージとMembershipService.WebFormsNuGetパッケージを使用してさらに優れたアプローチを採用しています。これらのパッケージは、ASP.NETメンバーシップを複数のデバイスから呼び出すことができるサービスとして公開します。
このブログのコメントからのいくつかのより多くの情報
同じ問題がありました。しかし、私たちが行ったことは、AuthenticateRequestにフックすることでした(あなたが行ったように)。また、リクエストがajaxであるかどうかを確認しました(これも、あなたが行ったように)。しかし、この時点で、のようなJSONを返し、{location: 'http://www.domain.com/path-to-login-page'}HTTPコード200を使用してそのメソッドの応答を終了しました。このようにして、jQueryは引き続きJSONの結果を取得します。ただし、結果に「location」プロパティがある場合は、クライアント側でログインページにリダイレクトするだけです。それが私たちのやり方であり、それは魅力のように機能します。