FormsAuthentication权限管理
通常我们在做访问权限管理的时候会把用户正确登录后的基本信息保存在Session中然后用户每次请求页面或接口数据的时候代上会话状态即能拿到Session中存储的基本信息Session的原理,也就是在服务器端生成一个SessionID对应了存储的用户数据,而SessionID存储在Cookie中,客户端以后每次请求都会带上这个Cookie,服务器端根据Cookie中的SessionID找到存储在服务器端的对应当前用户的数据或者使用Cookie会话。
FormsAuthentication是微软提供给我们开发人员做身份认证使用的。通过该认证我们可以把用户Name和部分用户数据存储在Cookie中,通过基本的条件设置可以,很简单的实现基本的身份角色认证。
下面案例是在不使用Membership的情况下使用系统提供的权限实现基于角色访问、控件权限实现。
a、登录设置用户权限信息
1、创建认证信息票据(FormsAuthenticationTicket)
属性:
注:若不是持久Cookie,Cookie的有效期Expiration属性有当前时间加上web.config中timeout的时间,每次请求页面时,在验证身份过程中,会判断是否过了有效期的一半,要是的话更新一次cookie的有效期;若是持久cookie,Expiration属性无意义,这时身份验证票的有效期由cookie的Expires决定;UserData:储存用户特定的身份权限识别码string类型(超级管理员...)
2、加密票据FormsAuthentication.Encrypt(FormsAuthenticationTicket对象)
3、将票据信息添加到Cookie对象中输出给前端(Cookie会话)
4、浏览器加密后的信息
b、获取认证信息
1、用户是否有权限访问
登录后在内容页我们可以通过当前请求的User.Identity.IsAuthenticated 得到是否通过了此用户验证;
2、获取用户权限等级信息
可以通过读取Request 中的Cookie 解密,获取到Ticket再从其中获取uname 和 userData (也就是之前存储的限识别码)。
c、退出登录(删除浏览器中的票据FormsAuthentication.SignOut())
Session相比:
区别:
a、FormsAuthentication依赖与Cookie存在,当禁止浏览器Cookie,Session可以URL重写
b、存储方式不同(Cookie将信息存储在客户端,Session信息存储在服务端)
c、验证权限方式不同(用FormsAuthentication时判断User.Identity.IsAuthenticated是否为True。User.Identity.Name是保存的数据同等与session["unique"],Session时判断session["unique"]==NULl是否为空)
d、Cookie单个信息保存数据不能超过4K,Session存内容取截与内存大小
e、Cookie保存的是字符串,Session保存的是对象
相同:都是用来跟踪浏览器用户身份的会话方式