5

新しい認証フィルターと以前の承認フィルターの違いは何ですか?. 違いはわかりません。私はいつも使用しました:[Authorize(Roles = "Admin, User")]

認証フィルターを使用するのはいつですか? いつ承認を使用するのですか?

誰かが違いを説明できますか?サンプルは素晴らしいでしょう。ありがとう

4

3 に答える 3

4

ここで記事を見つけることができます:

ここにも同様の投稿を作成しました:

私が得た答えはいくつかのことを明確にするのに最適でしたが、それを使用する方法についてはまだ少し混乱していますが、予想される動作についてはさらに混乱しています (私の投稿を読んだらわかります)。

簡単に言えば、新しいAuthenticationフィルターは古いフィルターの前にトリガーされAuthorizationます。

さらに、私が理解していることから、認証は、ユーザーが Web サイトで認証されているかどうかを確認するのに最適な場所です。言い換えれば、そのユーザーはある時点で、私がデータベースに対してそれらを検索するための資格情報を私に与えました. 答えが「はい」の場合は、すばらしい...続行します。

答えが「いいえ」の場合、ユーザーは認証されていないため、http ステータス コード401 Unauthorizedを返す必要があります。


についてはAuthorization、繰り返しになりますが、ユーザーは暗黙的に認証さAuthorizedれており、特定のページまたはリソースにアクセスする場合としない場合があると理解しています。その場合は、http ステータス コード403 Forbiddenを返す必要があります。そして、それが[Authorize]属性の出番です。


これは私が理解していることですが、これらの両方のフィルターの動作は、私が思うようには機能していません。私の理解不足が原因なのかもしれませんが…

例: 新しいフィルターは、属性Authenticationを認識 (または考慮) していないようです。[AllowAnonymous]そして、私がそれを見る方法は、そうあるべきです。

一方、古い[Authorize]属性は属性を認識 (および考慮) し[AllowAnonymous]ます。

最終的に、これがあなたを助けるか、もっと混乱させるかはわかりませんが、私はまだ完全に理解するために彼らと遊んでいる最中です.

于 2013-11-08T13:30:17.317 に答える
3

承認と認証の基本的な違いは、承認とは、何かを実行したり、何かにアクセスしたりすることが「承認されている」ことを確認するプロセスであるということです。そして、認証とは、そもそもあなたが誰であるかを確認すること、またはあなたが自分であると言った人が本当に本人であることを確認することです (つまり、あなたが「本物」であるということです)。

承認は通常、ユーザー ロール (ID にリンクされている) を確認し、それらのいずれかがアクセスされた機能に対して満足できるものであるかどうかを確認することによって行われます。通常、認証は、ユーザー名とともに保存されている (理想的には暗号化された形式で) パスワードが一致することを確認することによって行われます。たとえば、資格情報が正しいこと。もちろん、これはパスワードが秘密であるという前提に依存しているため、パスワードを知っているのはあなただけです。

ただし、Facebook サーバーが特定のユーザー名を持つ人物であると言うような拡張認証シナリオも可能です (以前にそのユーザー名でログインしたため)。シングル サインオン (SSO) と呼ばれるメカニズム。(場合によってはカスタムの) 認証フィルターを介して実装できるのは、これらのさまざまなシナリオです。

これまでのところ、いくつかの定義しか与えていません。しかし、要約すると; 原則として、認証はユーザーの役割を調べませんが、承認はユーザーの役割のみを調べます。また、承認は認証が完了した後にのみ行うことができることに注意してください。これが、認証フィルターが承認フィルターよりも優先される理由です。また、同じメソッドで両方の属性を使用できることも示しているため、通常、認証または承認のいずれかを選択することはできませんが、両方を使用できます!

[Authorized]属性が指定されていない単純な属性Roles=は、おそらく最も混乱を招きます。これは、ログオンしていること、たとえば認証されていることを確認するだけだからです。したがって、それは認証と見なすことができます。しかし、認証は実際にはそれ以前にすでに行われていました。認証フィルターは、MVC5 ごとにのみ追加されるようになりました。以前は、ほとんどの場合、(メンバーシップ) ログイン後に取得する ASP.NET 認証 Cookie という 1 つの手法を使用して認証が行われていたためです。oAuth およびその他の SSO ログイン方法が主流になったため、新しい認証フィルターは、代替手段をより簡単に実装するためのフックを提供します。のように:「Facebook が問題ないと言っている場合は、認証 Cookie を設定します」:)。

于 2014-02-05T23:06:49.510 に答える