問題タブ [authorize-attribute]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net-mvc - MVC3のOutputCacheおよびAuthorizeフィルター
私はMVC2に関する本を読んでいて、OutputCacheセクションに次のように記載されています。
警告前のセクション「承認フィルターが出力キャッシュとどのように相互作用するか」で、[承認]には、許可されていない訪問者が機密情報が既にキャッシュされているという理由だけで取得できないようにする特別な動作があることを説明しました。ただし、特に防止しない限り、キャッシュされた出力が、最初に生成されたユーザーとは異なる許可されたユーザーに配信される可能性があります。これを防ぐ1つの方法は、特定のコンテンツアイテムのアクセス制御を、アクションメソッドで承認ロジックをインラインで強制するのではなく、承認フィルター(AuthorizeAttributeから派生)として実装することです。これは、AuthorizeAttributeが出力キャッシュによってバイパスされないようにする方法を知っているためです。注意深くテストして、認証と出力キャッシュが期待どおりに相互作用していることを確認します。
これはMVC3でも当てはまりますか?
肯定的な場合、それを防ぐ方法は何ですか?(本の説明が曖昧すぎるため)。
よろしく。
asp.net-mvc-3 - 認証属性が機能しない
簡単なログインを追加したかったのです。したがって、データベースに資格情報を追加し、それをクエリして、ユーザー名とパスワードが一致する場合にログインするのが最善の方法だと思いました。これは機能しており、データベースにクエリを実行すると、ログインしてホームにリダイレクトされます。次に、URL からホームにアクセスしようとしたところ、ログインせずにアクセスできることに気付きました。それで、私は
許可されていないユーザーがアクセスできないようにするため、ホームコントローラーの属性をログインページにリダイレクトする必要があります。これは動作しません。コントローラーで承認を使用すると、アプリケーションでエラーが発生します。
web.config では、次のようになります。
そして、このような私のログインコントローラー。
では、この Authorize 属性をどのように使用するのが適切なのでしょうか? 私が使っている方法でも使用できますか?web.config に何か足りないものはありますか? よろしく!
これに一部更新。機能していなかったので、これをweb.configに追加しました:
ハードコードされた資格情報を持つメンバーシッププロバイダー:
次に、次のような Authorization 属性で HomeController を装飾してみました。
しかし、それでも同じエラーが発生します。ログインできるということですが、「ホーム」に到達すると、以前と同じエラーが発生します。これは地球上で何という名前ですか?! これの手がかりはありますか?!
よろしく!
asp.net-mvc-3 - MVC3 承認: 承認されたアクションを別のアクションから呼び出すのは悪い形式ですか?
RedirectToAction
別のアクションからコントローラー アクションを呼び出すときに使用する必要がありますか? 私は現在、それらを返してほしくないので、それらを直接呼び出すだけです。したがって、Authorizeタグをアクションの1つにバイパスします(これは私が望むことを行います)。
これが悪い形式かどうか教えてください。もしそうなら、複数の新しいアクションを作成してクライアント Cookie を設定するか、LogOn()
アクションに直接設定する必要がありますか?
代わりにSwitchClient
非公開にしてから、クライアント側の管理者のみが使用できるように承認済みアクションを公開することはできますか? 次に、アクションを介してプライベート アクションが呼び出されLogOn
ますが、ユーザーが管理者として認証されていないとアクセスできません。
これが私のコードです:
asp.net-mvc-3 - RegisterGlobalFilters を行う方法はありますが、JsonResult リクエストを除外しますか?
カスタム承認属性を定義しました。コントローラーのすべての ActionResult の上に属性をリストすることを避けるために、次のように属性を global.asax に追加しました。
ただし、これの意図しない結果は、すべての JsonResult 呼び出し中に認証コードが呼び出されることです。MyAuthorizeAttribute が JsonResult 呼び出しではなく ActionResult 呼び出しでのみ呼び出される方法はありますか? MVC3を使用しています。
asp.net-mvc-3 - Authorize属性のモックプレゼンス
コントローラーがMVC3の[Authorize]属性で装飾されていることをどのように模倣できるのでしょうか。カスタムメンバーシッププロバイダーを使用しています。コントローラーが属性で装飾されていて、許可されていることと、許可されていない場合はどうなるかをテストしたいと思います。私はMoqを使用しています。これについて何か良い提案はありますか?!
更新:現在、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というNullreferenceExceptionが発生しています。これは、AuthorizeAttributeの使用中にこの投稿で前述したNullReferenceExceptionと同じエラーです。
これは、Authorize属性に関連しています。私はiisで実行しており、カッシーニを使用していません。これがアプリケーションプールとユーザー権限に何らかの形で関連しているかどうかを誰かが知っていますか?これが修正されるまで、authorize属性に対して行ったテストは機能しません。
おそらく、Authorize属性をテストする他の方法がありますか?よろしくお願いします。
UPDATE2 それで、同僚からの広範な調査とデバッグの助けの後で、[Authorize]属性の問題を修正するために言及しました。web.configの次の行が欠落しているように見えます。
不思議なことに、これはトランクを共有している、またはベータ環境にいる別の同僚にとって問題を引き起こしませんでした。それは私にとってローカルでのみ問題を引き起こしました。これはGACの何かに関連している可能性があります。とにかくすべてが今動作します。
ありがとう。
c# - OnAuthorization の前に実行する ASP.NET MVC Global または BaseController ActionFilter
私のアプリケーション (ASP.NET MVC 3) には、すべてのコントローラーが継承する BaseController クラスがあり、その BaseController で OnActionExecuting メソッドをオーバーライドして、他のすべてのアクション メソッドでアクセスする必要があるため、セッション変数が設定されていることを確認しました。アプリケーションで。また、AuthorizeAttributeClass を拡張するカスタム Authorize 属性を定義しました。その属性では、OnAuthorization をオーバーライドして、BaseController の OnActionExecuting メソッドにロードしているのと同じセッション変数をチェックし、ユーザーが続行を許可されているかどうかを確認します。
BaseController
カスタム認証属性
問題は、BaseController の OnActionExecuting メソッドが AuthorizeByPermission 属性の OnAuthorization メソッドの後に起動していることです。Authorize 属性がアクセスを試行する前にセッション変数が存在しない場合、BaseController はセッション変数を設定する必要があるため、逆にする必要があります。それ。
基本的に、OnAuthorization メソッドが起動する前に発生するように登録できる基本クラス メソッドまたはグローバル フィルターを使用する方法を見つける必要があります。これを行う方法についてのアイデアはありますか?
GlobalFilter を登録してセッション変数をロードし、その Order プロパティを AuthorizeByPermission 属性よりも低く設定しようとしましたが、それもうまくいかないようでした。
また、BaseController で Execute メソッドをオーバーライドしようとしましたが、実際にはカスタム認証属性の前に起動しましたが、filterContext にアクセスできなかったため、ユーザーを SignIn ページにリダイレクトできなかったことが問題でした。セッション変数をロードします。
bmosh のコメントに従って、BaseController の OnActionExecuting メソッドを別のフィルターに変えて、AuthorizeByPermission 属性よりも小さい Order 番号を持つその属性で BaseController を装飾しようとしましたが、それでも機能しませんでした。
上記の設定でも、AuthorizeByPermission 属性が最初に発火します。
何か案は?
asp.net - AuthorizeAttributeフィルターのアクションを変更します
ユーザーがアクションの実行を許可されていない場合、でHandleUnauthorizedRequest
、ユーザーをエラーアクションにリダイレクトします。これにより、302エラーが発生します。
たとえば、から/Home/Index
、ユーザーはに移動し/Error/Unauthorized
ます。
リダイレクトの代わりに、を変更して、ユーザーがリダイレクトなしで許可されていないページを表示できるようにするにはどうすればよいActionResult
ですfilterContext.Response
か?
asp.net-mvc - AuthorizeAttribute MVC - ユーザーが作成したコンテンツへのアクセスを制限する
それで、独自の認証ルーチンを実装するのがいかに悪いかについて読みました!
そして、私は自分の行動をそのように実装していたので怖くなりました(たとえば、認証されたユーザーがログインしているユーザーではない場合、アカウントの詳細へのアクセスを防止します)
これは明らかに、ASP がアクションをキャッシュすることを決定した場合に壊れることを意味します (そのため、アクションは実行されません)。
だから私は今、AuthorizeAttributeを使って私がしなければならないことをすることを検討しています。
- 認証されていない場合、アクションへのアクセスを防止する
- 認証されたユーザーが取得したリソースにアクセスできるかどうかを確認します
しかし、私はそれについて考えるたびに、2番目のポイントを実装する方法について考えることができません. 役割はサイト全体のレベルであるため機能しませんが、アプリケーション内ではユーザーにも役割 (所有者、モデレーター、寄稿者、ユーザーなど) があり、アプリケーションのそれぞれの部分内でのみこれらの役割を持ちます (例: スレッドの所有者、wiki への寄稿者、フォーラムのモデレーターなど)
AuthorizeCore をオーバーライドするいくつかの例に出くわしました。持っているリソースごとに複数の AuthorizeAttribute サブクラスを作成することを想像できます (幸いなことに、それほど多くはありません)。しかし、それを見るだけで、そのアクションを実行するたびにデータベースにクエリを実行して、ログインしているユーザーがそのデータにアクセスして、クエリでそれを行う代わりに、アクションでデータベースにクエリを実行してモデルを取得できますか?
だから私の質問は
- キャッシングが多すぎることを心配しすぎていますか?次のいずれかが発生しますか
- Web サイトは、ユーザー B の画面に表示されるユーザー A の詳細をキャッシュしますか?
- Web サイトはページの管理者バージョン (編集コントロール付き) をキャッシュし、通常のユーザーにはキャッシュされたバージョンが表示されますか?
- AuthorizeAttribute の使用は当然のことですが、アクションの前にデータベースにアクセスすることなく、ポイント 2 で必要なことをどのように達成できますか? または、いずれにしてもそれを達成するための最良の方法は何ですか。
- それとも、ユーザーがログインしているかどうかを判断するためにのみ AuthorizeAttribute を使用し、アクションで他のチェックロジックを実行しますか?
とにかく、この投稿が古い道を踏んでいないことを願っています(決定的なものは何も見つかりませんでした)
編集:キャッシングを有効にしなければ、この問題は発生しないと思いますが、これは正しいですか?
編集: 今のところ、バニラの AuthorizeAttribute を使用してから、アクションでリソース レベルのアクセスを確認し、認証されたアクションにキャッシュを使用しないようにします。うまくいけば、今週中にこれに対するより多くの答えが得られるでしょう.
asp.net-mvc - アクション フィルターの実行順序
を実装する 2 つのクラスを作成しましたAuthorizeAttribute
。
1 つはグローバルに使用され、Global.asax.cs に設定します。
もう 1 つは呼び出されSecondAuthorizeAttribute
、一部のアクション メソッドでのみ使用され、必要なメソッドの属性として使用します。
問題は、SecondAuthorizeAttribute
常に の前FirstAuthorizeAttribute
に実行されることであり、これを最初に実行する必要があります。注文が役に立たないのですが、どうすればよいですか?
asp.net-mvc - ASP.Net MVC 3: 逆承認属性
いくつかのコントローラーといくつかのアクションを備えた単純な ASP.Net MVC 3 アプリケーションがあります。
現在、これはユーザー ベースのアプリケーションであるため、ほとんどのコントローラー アクションではユーザーの認証が必要です。MVC は、コントローラーやアクションを個別に装飾するために使用できる組み込みの Authorize 属性を使用して、これを適切に処理します。
素晴らしいことは、属性をコントローラーだけに適用できることです。その特定のコントローラーのすべてのアクションにも適用されます-多くの入力が節約されます;)
しかし、たとえば 10 個のアクションを持つコントローラーが 1 つあります。しかし、アクションの 1 つに Authorize 属性を適用しないようにしたいと考えています。
はい、属性を他の 9 に適用し、コントローラーから削除することで、必要なことを正確に行うことができます。しかし、それをコントローラーに適用したままにして、アクションの 1 つを除外することを選択する方法はありますか?
事実上、次のようなものが必要になります...
[!Authorize]
また[NotAuthorize]
仕事をするカスタムのものを作成できることは知っていますが、知りたいのは、これを行う組み込みの方法があるかどうかです? または、属性を他の 9 つのアクションすべてに適用する必要がありますか?