0

データベースを共有するいくつかの ASP.NET MVC Web サイトを構築しています (内部でデータを共有しているため)。とはいえ、現時点ではサイト間のログインは共有されません。参考までに、私は (現在) 内部で SQL Server とのデータ アクセスに NHibernate を使用しています。

現在レイアウトされているように、システムにはサイト、ロール、ユーザー、および権利のテーブルがあります。サイトには、一連のユーザー、権限、および役割があります。ユーザーは多くの役割を持つことができます。役割には一連の権利があります。ユーザーはユーザー名とパスワードでサインインできるようになりますが、私は自分自身を窮地に陥れたくはありません。後で Google または Facebook のログインを使用できるようにしたいかもしれません。

さて、サイトの保護に関してどの道をたどればよいか、少し混乱しています。いくつかの理由から、私は古い学校のメンバーシップとロール プロバイダーに夢中ではありません。これらの中で重要なことは、ロールによって多くのことを制限しないということです。ユーザーのアクセス権に基づいて制限されます。私は、認証のための次のいくつかのシナリオを見ています。1) 属性を介してコントローラ メソッドを使用するために必要な権限を指定できるようにしたい。2) ユーザーが特定のロールに属しているか、特定の権限を持っているかどうかをすばやくクエリして確認できるようにしたい。

ですから、実際には一連の質問がありますが、それらは絡み合っています。まず、どうすればいいですか?カスタム認証属性だけですか? 次に、ログインなどの流れは?これが適切かつ安全に機能するために必要な手順は何ですか?

私はこれらが一種の初心者の質問であることを認識していますが、過去には、古いプロバイダーのやり方で物事を進めてきました。私はそれを特に気にしません。より良い提案が本当に欲しいです。だから、私にとって古いものはすべて新しいものだと思います。

4

1 に答える 1

0

私はペストのように MS からメンバーシップ プロバイダーを逃れます。それが .NET 2.0 で登場したとき、すでに実装が不十分であり、最近の更新でも改善されていません。

ロール、ユーザー、..これはメンバーシップ プロバイダーにバインドされていないため、独自に使用できます。認証を設定し、認証を処理する httmodule を作成します (Context.User.Identity の単純な userId で十分です)。

必要なのは、IIdentity と httmodule から派生した User だけです

string[] roles = new[] {"Admin", "CoolDude"};
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(user, roles);

..そして、mvc コントローラーに必要な認証属性を追加するだけで、ゲームがプレイされます!

カスタム ロール、カスタム mvc 属性を作成するか、ユーザーが特定のロールに直接属しているかどうかをクエリします。

if (HttpContext.Current.User.IsInRole("Admin")) { ...
于 2013-07-14T21:43:47.027 に答える