ロールがHttpContextのIPrincipalに追加されます。 GenericPrincipalを作成し、コンストラクタ内のロールのリストを解析し、HttpContext.Userとして設定できます。 GenericPrincipalはその後User.IsInRole("role")
を通じてアクセスできるようになりますか[Authorize(Roles="role")]
属性
(C#で)これを行う1つの方法は、あなたの認証チケットを作成する際に、ユーザデータパラメータのカンマ区切りの文字列としてあなたの役割を追加することです
string roles = "Admin,Member";
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
1,
userId, //user id
DateTime.Now,
DateTime.Now.AddMinutes(20), // expiry
false, //do not remember
roles,
"/");
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName,
FormsAuthentication.Encrypt(authTicket));
Response.Cookies.Add(cookie);
は、その後、あなたのGlobal.asax.cs
protected void Application_AuthenticateRequest(Object sender, EventArgs e) {
HttpCookie authCookie =
Context.Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie != null) {
FormsAuthenticationTicket authTicket =
FormsAuthentication.Decrypt(authCookie.Value);
string[] roles = authTicket.UserData.Split(new Char[] { ',' });
GenericPrincipal userPrincipal =
new GenericPrincipal(new GenericIdentity(authTicket.Name),roles);
Context.User = userPrincipal;
}
}
クラウスがあなたに前もって答えなかったなら、私はあなたに正しい答えを与えたでしょう。これは、私も同様にやっている正確な方法です。詳細な答えをありがとう。申し訳ありません、少し遅かったです。 –
クッキーを無効にしているユーザーにはこれはうまくいかないと思いますか? – Omu
@Omuクッキーが存在しない場合、Application_AuthenticationRequest()メソッドを変更してURL内の認証チケットを検索するだけで、Cookieレス認証をサポートできます。重要な部分は、役割が暗号化された認証チケットに格納されていることです。 –