2011-12-17 4 views
3

新しいASP.NET MVC3フレームワークとFormsAuthを使用してWebサイトを構築します。ウェブサイトを保護するためのものです。私はFormsAuthenticationTicketのUserDataプロパティにユーザの役割を保存しています(手動でクッキーを設定しています)。次に、クッキーに追加する前にチケットのencryptメソッドを呼び出します(以下の標準チケットのsnipletを参照してください)。FormsAuthenticationTicket暗号化後もユーザーのデータを読み取ることができます(フォーム認証のasp.net MVC3)

if (Validate(model.UserName, model.Password)) 
       {      
        FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, 
          model.UserName, 
          DateTime.Now, 
          DateTime.Now.AddMinutes(30), 
          false, 
          UserType.Administrator.ToString()); 
        string encryptedTicket = FormsAuthentication.Encrypt(authTicket); 
        HttpCookie faCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); 
        Response.Cookies.Add(faCookie); 
        return RedirectToAction("startpage", "mycontroller"); 
       } 
      }  

は、今私はAuthorizeAttributeは、ユーザーが1に認証されているかどうかを確認することができthatsのと2.(チケットから)管理者の役割を持つカスタムを作りました。 (below) この派生クラスのAuthorizeCoreメソッドは、属性annotを持つクラスでアクションが発生すると呼び出されます。

ここで私は混乱しています。

(有効な資格情報、デバッグで)実行されているコードに従い、各行で作成された変数の値を確認すると、encryptedTicketはreponsecookieに追加する前に正常に暗号化されます。

しかし、コントローラ(インデックスページの)が呼び出されているときにAuthorizeCoreメソッドをチェックすると、HttpContextを取得するパラメータに暗号化されていないものがすべて含まれているので、チケットをもう解読する必要はありませんクッキーを読むとき。

チケットをクライアントに送り返すログオンコントローラで正常に暗号化されていることがわかりますが、AuthorizeAdministratorクラスのhttpcontextがすべて暗号化されていないことが再度確認されます。

申し訳ありませんが長い質問/物語のために、それはおそらく簡単で短い答えです。 私の話がはっきりしていることを願っています。

ありがとうございました。

+0

にユーザロールを使用しないのはなぜロールを自分で作成してUserDataフィールドに入れるのではなく、そのロールを保存しますか? –

答えて

3

フォーム認証は、ユーザーが許可されているかどうかを判断するために、早期のページ処理パイプラインでクッキーを復号化するために必要 - それはUser.Identityの詳細を記入したときにそれがだ、などを

+0

ありがとう、そのような何かを期待していたが、確かにしたい:) – NeedACar

関連する問題