新しい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がすべて暗号化されていないことが再度確認されます。
申し訳ありませんが長い質問/物語のために、それはおそらく簡単で短い答えです。 私の話がはっきりしていることを願っています。
ありがとうございました。
にユーザロールを使用しないのはなぜロールを自分で作成してUserDataフィールドに入れるのではなく、そのロールを保存しますか? –