問題タブ [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.

0 投票する
1 に答える
486 参照

asp.net-mvc-3 - `AuthorizeAttribute` によってリダイレクトされたときにログイン ページにカスタム メッセージを表示する

AuthorizeAttributeログインページにメッセージを表示するカスタムを作成しました。これがコードです。

私の行動で私はします

HttpContext.Current.Items["LoginFailMessage"]現在、ビュー内のアイテムにアクセスできません。問題は、アイテムが 1 回のリダイレクト呼び出しに対してのみ存在するのに、認証の失敗が複数回のリダイレクトを引き起こしていることです。

それで、私が問題を解決できる方法はありますか?正確にはどこからメッセージを渡す必要がありますか?

編集

私がしようとしているのは、匿名ユーザーが何かの簡単な説明を見ることを許可されているとします。

説明とともに、editdetailリンクがあります。と の両方editdetail、ユーザーはログインする必要があります。そのため、どちらかをクリックすると、ユーザーはログイン ページにリダイレクトされます。

ユーザーがクリックするeditとメッセージが表示され、Please login to editクリックdetailするとplease login to see detailログインページに表示される場合があります。

0 投票する
2 に答える
1223 参照

.net - .net MVC で 1 つの領域のみへのアクセスを拒否するには?

.Net MVC 4 を使用して 1 つの領域のみを拒否しようとしていますが、結果が得られません。web.configに入れる<authentication mode="Forms" />と、すべてが拒否されます。すべてのサイトであり、私が望むものではありません。管理領域のみを拒否したいのです。

私は自分の管理エリアに入れましAuthorizeAttributeBaseControllerが、まだ機能していません:

Global.asax:filters.Add(new AutenticarAdminAttribute());

<authentication mode="Forms" />が web.config から削除するAuthorizeAttributeと、作業は行われず、IsAuthenticated常に true になります。

そして、もう一度<authentication mode="Forms" />web.config に入れると、すべてが拒否されます。

エリアだけを制限することはできません。

管理エリアの BaseController:

管理エリアの DefaultAdminController:

公開コントローラー:

0 投票する
2 に答える
873 参照

asp.net-mvc-3 - モデル リストによるロールベースの承認

私は3つのモデルを持っています[User、Role、およびUserRole]

[Authorize] 属性を使用したコントローラーの役割ベースの承認で、クラス内のコントローラー アクションにアクセスするには、ユーザーが管理者の役割を持っている必要があることを指定します。

これでいい、私が必要なのは、

Role Collection を [Authorize] 属性に割り当てる方法はありますか? 例えば

Logged in User から割り当てられたロールを取得し、List に保存します。このリストを [承認] 属性に割り当てることはできますか? 次のようなもの:

0 投票する
3 に答える
16872 参照

asp.net-mvc - カスタム認証を使用したカスタム AuthorizeAttribute

一部の WCF サービスのフロントエンドとして ASP.NET MVC 4 Web アプリケーションを使用しています。すべてのユーザーのログイン/ログアウトとセッション制御はバックエンドで行われます。MVC アプリは、セッション ID を持つ単一の Cookie のみを保存する必要があります。私のクライアントはフォーム認証の使用を許可していません。すべてをカスタマイズする必要があります。

web.config で次のように設定しました。

グローバルフィルターもあります:

これは Global.asax で呼び出されます

承認を必要としないすべてのコントローラーとアクションに [AllowAnonymous] のマークを付けました。

そして今、MyAuthorizeAttribute を実装する必要があります。いくつかのチュートリアルを試しましたが、私のシナリオと完全に一致するものはありません。

基本的に、各アクションに対して次のシナリオを処理する必要があります。

  1. 有効な Cookie がある場合、現在のリクエストは承認されていると見なされます (確認する役割はなく、1 種類のユーザーのみです)。
  2. Cookie がない場合は、デフォルトの MVC ハンドラー (アカウント/ログインをロードしようとする) をオーバーライドし、ユーザーがログインする必要があるというメッセージを表示して、ユーザーをホーム/インデックス ページにリダイレクトする必要があります。
  3. WCF メソッド呼び出しが、カスタム SecurityFault がセッションの有効期限が切れたことを示す FaultException をスローした場合 (SecurityFault には、例外の理由を含むカスタム enum フィールドがあります)、カスタム セッション Cookie を破棄し、ユーザーを Home/Index ページに再度リダイレクトする必要があります。最後のセッションが期限切れになったため、ユーザーがログインする必要があるというメッセージ。他のすべての SecurityFaults については、通過させることができます。グローバル エラー ハンドラがあります。

私が理解している限り、AuthorizeCore (Cookie をチェックして、セッションが存在し、まだ有効かどうかを確認するため) と HandleUnauthorizedRequest (ユーザーをデフォルトのログイン ページではなくホーム/インデックスにリダイレクトするため) をオーバーライドする必要があります。

私が試したリダイレクトのために:

これは、2番目のシナリオをうまく処理しているようです(ただし、そのベースコールについてはわかりません-必要ですか?)。

最初のシナリオでは、AuthorizeCore を実装する必要があります。よくわかりません、正しく行う方法。AuthorizeAttribute には、キャッシュの状況を処理するためのコードと、おそらくもっと多くの隠された機能があることがわかりましたが、それを壊したくありません。

3 番目のシナリオでは、MyAuthorizeAttribute で処理できるかどうかわかりません。AuthorizeAttribute はアクション内で発生する例外をキャッチできますか?それともグローバル エラー ハンドラで SecurityFault.SessionExpired の状況を処理する必要がありますか?

0 投票する
1 に答える
605 参照

asp.net-mvc - MvcSiteMapProvider により、MVC4 Web サイトで認証の問題が発生する

新しい MVC4 Web サイトで MvcSiteMapProvider を実装しようとしていますが、修正できないような問題に遭遇しました。

Active Directory で認証をセットアップしました (現在、ロール プロバイダーはありません)。すべてが正常に機能していました。ログイン ページ以外のページにアクセスしようとすると、ログイン ページにリダイレクトされます。アカウント コントローラーのアクション メソッドには [allowAnonymous] 属性があり、認証されていないユーザーがアクセスしてログインできるようにします。

なんらかの理由で、MvcSiteMapProvider をプロジェクトに追加すると、これが機能しなくなり、認証されていないユーザーが任意のページにアクセスできるようになります。MvcSiteMapProvider が作成するメニューは正しく機能し、認証されたユーザーのみが表示できますが、認証されていないユーザーが直接リンクを入力すると、以前のようにログイン ページにリダイレクトされません。

プロジェクトから MvcSiteMapProvider を削除したところ、認証が再び正しく機能し始めました。これは、MvcSiteMapProvider が authorizeAttribute フィルターを何らかの方法でオーバーライドすることと関係があると思いますが、どこでどのように行うのかわかりません。

[Authorize] をコントローラーの上に置くことができ、リダイレクトは MvcSiteMapProvider で機能しますが、それは MVC4 を使用する理由全体に反します。

この問題は MvcSiteMapProvider/External/AuthorizeAttributeBuilder.cs から発生していると感じていますが、これを理解するのに十分な経験がありません。

更新: グローバル フィルターを正しく設定していないことがわかりました。何らかの理由で、RegisterGlobalFilters メソッドが global.asax ファイルにあったため、FilterConfig.cs ファイルに次の行がありませんでした。

global.asax ファイルからメソッドを削除し、上記のフィルターで FilterConfig.cs ファイルを更新したところ、すべてが期待どおりに機能するようになりました。どうやってこの状況になったのかわかりませんが、理解できてよかったです。

mvcSiteMapProvider GitHub プロジェクトの誰かが、MVC4 と mvcSiteMapProvider がシームレスに動作していると述べていたので、新しい MVC4 アプリを作成し、変更を加える前に mvcSiteMapProvider を追加してから、authorize グローバル フィルターを追加しました。すべてが期待どおりに機能したので、プロジェクトを比較して、どこが間違っているかを見つけました。この情報が誰かの役に立てば幸いですが、かなり特殊なケースであるため、疑わしいと思います。

0 投票する
1 に答える
968 参照

asp.net-mvc-4 - NinjectAuthorizationとActionFilterのバインド順序

NinjectのBindFilter<>構文を使用して適用しようとしている2つのフィルターがあり、それらは依存性注入で正常に適用されています。問題は、現在のユーザーが誰であるかを分類してバインドしInRequestScope、メンテナンス認証を確認するときに2番目のユーザーの前に実行する必要があるという事実にあります。そうでない場合は、参照しているユーザーがわかりません。

のフィルター結合はNinjectWebCommon.cs次のようになります。

したがって、メンテナンスコントローラでは、最初のコントローラを実行してから2番目のコントローラを実行する必要があります。他のすべてでは、最初のものだけです-これは機能します。2番目のものは、メンテナンスコントローラーで何かを参照するときにのみ使用されます。

2つのフィルターはそのように宣言されています(無関係な詳細は除外されます)

ブレークポイント1がヒットし、次にブレークポイント2がヒットすることを期待していますが、何らかの理由で、常に最初にブレークポイント2になります。この時点ではユーザーがわからないため、認証がないことがわかります。

FilterScopeと順序設定のさまざまな順列を試しましたが、それらを異なる順序でバインドすることもできましたが、何も機能しません...何が間違っているのでしょうか。

0 投票する
3 に答える
5943 参照

c# - OnActionExecuting(ActionExecutingContext filterContext) の下の User.Identity にアクセスできません

何が欠けているのかわかりませんが、実際には参照できませ User.IdentityOnActionExecuting(ActionExecutingContext filterContext)

それを修正する方法の手がかりはありますか?

0 投票する
1 に答える
3469 参照

asp.net-mvc-3 - MVC 3 のカスタム Authorize 属性からアクション メソッド パラメーターにアクセスする

ユーザーがログインしてデータを管理できるMVC 3アプリを作成しています。ユーザーが他のユーザーのデータを閲覧したり、改ざんしたりできないようにしたい。私の最初の本能は、次のように各アクション メソッドで関連するオブジェクトへのアクセスを確認することでした。

これは問題なく動作しますが、オブジェクトの承認コードを AuthorizeAttribute から派生したカスタムの Authorize 属性に入れ、それをコントローラーに適用する方がよいのではないかと考えました。残念ながら、カスタムの Authorize 属性内からアクション メソッドのパラメーターにアクセスする方法を見つけることができませんでした。代わりに、着信 objectId にアクセスする唯一の方法は、httpContext.Request または filterContext.RequestContext.RouteData.Values を調べることです。

このアプローチは非常に不格好だと思います。RouteData または Request オブジェクトをいじる必要は本当にありません。モデル バインディングはすでに RouteData と Request から関連データを引き出しているため、アクション メソッドのパラメーターにアクセスできるようにすると、はるかにクリーンになります。

カスタム アクション フィルター (詳細はこちら)からアクション メソッドのパラメーターにアクセスできることはわかっていますが、データ承認コードを承認フィルターに配置するべきではありませんか? Authorize フィルターの例が増えれば増えるほど、役割を処理するためだけに意図されているという印象を受けます。

私の主な質問は、カスタム Authorize 属性からアクション メソッドのパラメーターにアクセスするにはどうすればよいですか?

0 投票する
4 に答える
7519 参照

c# - ASP.NET MVC4で、{controller} / {id}にリダイレクトする方法は?

ASP.NETMVC4プロジェクトに次のルート構成があります。

ここで、の代わりにを指すURLを生成するRedirectResultまたはを生成する方法を知りたいと思います。RedirectToRouteResult/Error/403/Error/Index/403

追加情報

オーバーライドされたメソッドの内部のカスタム実装から、許可されていないユーザーをリダイレクトしようとしています。System.Web.Mvc.AuthorizeAttributeHandleUnauthorizedRequest(AuthorizationContext)