4

simplemembership が構成された MVC4 プロジェクトがあります。それはすべて機能していますが、ユーザーが特定のページを表示する権限がない場合に、どのコントローラー/アクションにリダイレクトするかを伝える方法を知りたいです。

たとえば[Authorize(Roles="Admin")]、「管理者」ロールを持たないログイン ユーザーでそのページを使用して表示しようとすると、既にログインしているにもかかわらず、ログイン ページにリダイレクトされます。

これを別のものに変更したいと思います...おそらく404または「そのコンテンツを表示する権限がありません」という素敵なメッセージです。

これを行うために考えられるほぼすべてのことをグーグルで検索してみましたが、これまでのところ答えが見つかりませんでした。

これは現在のセットアップで実行できますか、それとも何か他のものが必要ですか? 正しい方向へのポインタをいただければ幸いです:)

4

2 に答える 2

2

カスタムの AuthorizeAttribute を作成し、OnAuthorizationメソッドをオーバーライドして、承認が失敗した場合はカスタム ページにリダイレクトし、認証が失敗した場合はログオン ページにリダイレクトするようにしてください。一部の人々が使用する別のアプローチは、現在のユーザーがログオン ページで認証されているかどうかを確認することです。認証が失敗したために、このページにリダイレクトされたと見なすことができます。その場合、そのページへのアクセスが許可されていないことを示す特別なメッセージをユーザーに表示します。一部のアプリケーションでは、ユーザーが複数のアカウントを持っていて、操作の実行が許可されている別のアカウントにログオンする必要があるため、これが理にかなっている場合があります。これらの概念のいくつかは、この QA で説明されています。

于 2013-05-24T14:38:29.910 に答える
2

残念ながら、これは Asp.net 全体の問題であり (HTTP 仕様の問題に起因していますが)、無許可のユーザーと認証されていないユーザーを区別していません。違いについて。この動作を変更するには、多くのコードを記述する必要がありますが、既に認証されているかどうかを確認するカスタム ハンドラーを記述する方が簡単です。

HTTP 標準は、ユーザーが「認証済み状態」になることを意図していません。実際、それは「ユーザー」の概念についてさえ知りません。各ページ要求は、他のページ要求とは無関係に情報を運ぶことを目的としています。ブラウザーがこの情報をキャッシュする (または認証が Cookie によって行われる) という事実は、標準の意図とは無関係です。

標準では基本的に、要求されたリソースが承認されていない場合、サーバーは 401 を発行する必要があり、各要求には独自の承認があるため、単純な成功/失敗のシナリオが意図されています。サイトの許可された状態の概念はありません。リクエストは成功または失敗します。

ASP.NET のようなフレームワークは、独自の承認/認証状態を作成するために長い道のりを歩んできましたが、実際にはここまで行くべきです。

このスレッドは、正確な解釈に関する Web コミュニティ間の意見の相違に関して啓発的であると思われるかもしれません。

403 Forbidden vs 401 Unauthorized HTTP レスポンス

于 2013-05-24T00:19:07.730 に答える