不正なリクエストは returnUrl クエリ文字列パラメータを使用してログイン ページにリダイレクトされません
-
11-10-2019 - |
質問
設定
私の MVC3 アプリでは、MembersController が [Authorize] 属性で装飾されています。
MembersController には MyPage というアクションがあります。コントローラーの Authorize 属性により、MyPage は許可されたユーザーのみが要求できます。
問題
権限のないユーザーが /Members/MyPage をリクエストしようとすると、ログイン ページに正しくリダイレクトされます。
ただし、ReturnUrl パラメータはログイン ページに渡されないため、ユーザーが認証すると、/Members/MyPage ではなくデフォルト ページ (/Members/Home と呼びます) に移動します。
質問
なぜ?!
MVC2 で開発された別のアプリでは、returnUrl QS パラメーターが存在し、期待どおりに機能します。
その他の問題:
Autorize 属性は、コントローラーとアクションの両方を装飾するときに無視されます。
解決:
web.config のセクションが .NET 3.5 と .NET 4 の間で適切に更新されません。以下の回答を参照してください。
解決
@Marcind は私を正しい道に導いてくれました。@Darin Dimitrov の答えは、関連するプロセスについて非常に有益でした。
診断
この問題は、既存の Web フォーム .NET 3.5 アプリを .NET 4.0 アプリにマージするときに適切に更新しなかった web.config に関連しているようです。どうやってこれに取り組んだのか思い出せません。
とにかく、アプリの web.config を新しい MVC 3 web.config と比較することで、3.5 日後に残った、そこにあるべきではない余分なビットを見つけることができました。
解決:
この問題は、web.config の <authentication><forms> タグと <membership> タグのビットを修正することで解決されました。
これによって引き起こされるその他の問題:
これによって引き起こされるもう 1 つの問題は、コントローラーを Authorize 属性で修飾すると無視されるため、コントローラーは現在のユーザーに基づいて情報を処理しようとしたため、明らかに null であるため、あらゆる種類の例外が発生するという事実でした。
他のヒント
わたしにはできる。ASP.NET MVC 3 RC2、デフォルトのテンプレートを使用して新しいプロジェクトを作成し、MembersController を追加し、それを装飾しました。 [Authorize]
属性、アプリケーションの実行、リクエスト /members/index
, にリダイレクトされました /Account/LogOn?ReturnUrl=%2fmembers%2findex
, 、ログイン済み、にリダイレクトされました /members/index
. 。コードに何か他の問題があるはずです。
仕組みは次のとおりです。
- の
[Authorize]
属性はユーザーが認証されているかどうかを確認し、認証されていない場合は 401 ステータス コードを返します。 - の フォーム認証モジュール これは ASP.NET の一部であり、フォーム認証を処理します。401 ステータス コードをインターセプトし、最初の要求を指す ReturnUrl パラメーターを要求に追加することでログイン ページにリダイレクトします。
の FormsAuthenticationModule
モジュールは ASP.NET MVC に固有のものではありません。これは標準の ASP.NET のものです