MVC身份验证FormsAuthenticationTicket

引用 using System.Web.Security;

FormsAuthenticationTicket ticket=new FormsAuthenticationTicket(1,UserName,DateTime.Now, DateTime.Now.AddHours(4), false, user.RoleName, "/");
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket));
                    cookie.HttpOnly = true;//可以防止浏览器攻击窃取、伪造Cookie,但是客户端js无法读取到这个Cookie
                    Response.Cookies.Add(cookie);

将信息存储在cookie中。

从cookie中读取姓名和角色

var cookies = Request.Cookies[FormsAuthentication.FormsCookieName];
                    var tickets = FormsAuthentication.Decrypt(cookies.Value);
                    string role = tickets.UserData;
                    string[] ss = role.Split(',');
                    string name = User.Identity.Name;

P.S.  :1、Ticket存储在在Cookie过期时间,和关闭浏览器是否在记住当前票据,在FormsAuthenticationTicket实例化时候可以设置参数,

    2、Role 的获取可以不要存储在ticket 的userData中,可以直接从数据库读取,userData可以存储其他信息。

    3、要想灵活配置Controller 和Action的 允许访问的Role 可以自定义AuthorizeAttribute  override里面的OnAuthorization方法,在该方法中

      读取当前页面允许访问的角色ID,根据当前用户的RoleID,进行检查。这样也就实现了,Role的灵活配置。

            4、Ticket中的信息,最终还是存储在cookie中,安全性方面还是自己斟酌吧,个人觉得还是把UserID和RoleID存储在Session中的比较好。


阅读更多 登录后自动展开
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页