2009-12-01 12 views
5

AuthorizeAttributeを使用して、自分のアクションへのアクセスを許可するユーザーを制御したいと考えています。私は自分の論理が整っていることを明確にしたい。ASP.Net MVCメンバーシップ

  1. 私はIPrincipal
  2. の私の独自の実装を作成し、私はセキュリティコントローラのログインアクションにユーザーの資格情報を投稿してください。
  3. 私はUserServiceのクラスで資格情報を検証し、IPrincipalを割り当てるには、AuthorizeAttributeを継承
  4. 私WebAuthorizeAttributeは、現在のHttpContext.User.Identity.IsAuthenticatedとHttpContext.User.IsInRoleをチェックHttpContext.Userに私のUserServiceのクラスから返されますユーザーがアクションにアクセスできるかどうかを判断します。

通常の流れですか?私はMembershipProviderを継承できることは知っていますが、そこにある機能のすべてを必要とせず、実際には2つの異なる役割でログインできるだけです。

答えて

4

IPrincipalをどこかに保存して、すべての要求で復元する必要があります。あなたはをFormsAuthenticationを使用します場合、これは良い解決策です:

ASP.NET 2.0 Forms authentication - Keeping it customized yet simple

あなたはここに他の解決策を見つけることができます。他の多くのStackOverflowの質問で

Where to store logged user information on ASP.NET MVC using Forms Authentication?

とpropablyを:)

編集

についてMyBusinessLayerSecurityClass.CreatePrincipal(ID、id.Name):

あなたがこのページをお読みください:

http://msdn.microsoft.com/en-us/library/aa480476.aspx

は特別にこの:

FormsAuthenticationModule クラスは を構築GenericPrincipal オブジェクトとstそれはHTTP の文脈の中にある。 GenericPrincipal 目的は、現在 認証されたユーザーを表す FormsIdentity インスタンスへの参照を保持しています。これらの タスクを管理するには、 フォーム認証を許可する必要があります。 が IPrincipalインターフェイスを実装するような などの特定の要件があり あなたのアプリケーションは、カスタムクラスにユーザー プロパティを設定する場合は、 アプリケーションは PostAuthenticate イベントを処理する必要があります。 PostAuthenticate イベントが オブジェクトFormsIdentity FormsAuthenticationModule後にフォーム認証 クッキーを検証し、 GenericPrincipalを作成していると 起こります。このコード内では、 カスタム IPrincipal FormsIdentityオブジェクト、 をラップして、 のHttpContextに保管しオブジェクト を構築することができます。ユーザー プロパティ。

認証Cookieを設定すると、FormsIdentityが自動的に管理されます。あなたがしなければならないことは、あなたのIPrincipalで包むことだけです。これはすべて、HttpContext.Current.Userプロパティがnullでない場合に発生します。(直後に置き換えるGenericPrincipalです)。 HttpContext.Current.Userがnullの場合、以前に作成された認証Cookieはなく、ユーザーは認証されません。

+0

私は多くの質問と外部ブログを読んだことがありますが、本当にこの部分を文脈に入れるようなものはありません。 – scottm

+0

MyBusinessLayerSecurityClass.CreatePrincipal(id、id.Name)の部分について説明できますか。 HttpContext.Current.Userプロパティがnullの場合、FormsIdentityの取得方法はわかりません。 – scottm

2

私は次はもっと典型的であると考えている:

  1. 私はIPrincipal
  2. の私の独自の実装を作成し、私はセキュリティコントローラのログインアクションにユーザーの資格情報を投稿してください。
  3. 資格情報をUserServiceクラスで検証し、はこのユーザーの識別情報を持つCookieを作成します。通常、FormsAuthentication.SetAuthCookieまたはそのクラスのユーティリティメソッドのいくつかの組み合わせが使用されます。
  4. Application AuthenticateRequestイベントで、Cookieを調べてContext.Userを割り当てます。注:この値は、AuthenticateRequestイベントの後でThread.CurrentPrincipalに自動的に割り当てられます。これは1回限りの割り当てであり、これらの値はその後自動的に同期されません。
  5. AuthorizeAttributeを継承するMy WebAuthorizeAttributeは、現在のHttpContext.User.Identity.IsAuthenticatedおよびHttpContext.User.IsInRoleをチェックして、ユーザーがアクションにアクセスできるかどうかを判断します。
+1

+1:それも私がやっていることです。私のポストは、クッキーを検査する方法を説明しています。 – LukLed

+0

優秀、入力ありがとう – scottm

関連する問題