资源描述:
《详细解析form验证实战》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、详细解析Form验证实战 Asp.net中基于Forms验证的角色验证授权 Asp.net的身份验证有有三种,分别是"Windows
2、Forms
3、Passport",其中又以Forms验证用的最多,也最灵活。 Forms验证方式对基于用户的验证授权提供了很好的支持,可以通过一个登录页面验证用户的身份,将此用户的身份发回到客户端的Cookie,之后此用户再访问这个web应用就会连同这个身份Cookie一起发送到服务端。服务端上的授权设置就可以根据不同目录对不同用户的访问授权进行控制了。 问
4、题来了,在实际是用中我们往往需要的是基于角色,或者说基于用户组的验证和授权。对一个网站来说,一般的验证授权的模式应该是这样的:根据实际需求把用户分成不同的身份,就是角色,或者说是用户组,验证过程不但要验证这个用户本身的身份,还要验证它是属于哪个角色的。而访问授权是根据角色来设置的,某些角色可以访问哪些资源,不可以访问哪些资源等等。要是基于用户来授权访问将会是个很不实际的做法,用户有很多,还可能随时的增减,不可能在配置文件中随时的为不断增加的新用户去增加访问授权的。 下面大概的看一下Forms的
5、过程。 Forms身份验证基本原理: 一身份验证 要采用Forms身份验证,先要在应用程序根目录中的Web.config中做相应的设置: 其中表示本应用程序采用Forms验证方式。
6、1.标签中的name表示指定要用于身份验证的HTTPCookie。默认情况下,name的值是.ASPXAUTH。采用此种方式验证用户后,以此用户的信息建立一个FormsAuthenticationTicket类型的身份验证票,再加密序列化为一个字符串,最后将这个字符串写到客户端的name指定名字的Cookie中.一旦这个Cookie写到客户端后,此用户再次访问这个web应用时会将连同Cookie一起发送到服务端,服务端将会知道此用户是已经验证过的. 再看一下身份验证票都包含哪些信
7、息呢,我们看一下FormsAuthenticationTicket类: CookiePath:返回发出Cookie的路径。注意,窗体的路径设置为/。由于窗体区分大小写,这是为了防止站点中的URL的大小写不一致而采取的一种保护措施。这在刷新Cookie时使用 Expiration:获取Cookie过期的日期/时间。 IsPersistent:如果已发出持久的Cookie,则返回true。否则,身份验证Cookie将限制在浏览器生命周期范围内。 IssueDate:获取最初发出Cookie的
8、日期/时间。 Name:获取与身份验证Cookie关联的用户名。 UserData:获取存储在Cookie中的应用程序定义字符串。 Version:返回字节版本号供将来使用。 2.标签中的loginUrl指定如果没有找到任何有效的身份验证Cookie,为登录将请求重定向到的URL。默认值为default.aspx。loginUrl指定的页面就是用来验证用户身份的,一般此页面提供用户输入用户名和密码,用户提交后由程序来根据自己的需要来验证用户的合法性(大多情况是将用户输入信息
9、同数据库中的用户表进行比较),如果验证用户有效,则生成同此用户对应的身份验证票,写到客户端的Cookie,最后将浏览器重定向到用户初试请求的页面.一般是用FormsAuthentication.RedirectFromLoginPage方法来完成生成身份验证票,写回客户端,浏览器重定向等一系列的动作. publicstaticvoidRedirectFromLoginPage(stringuserName,boolcreatePersistentCookie,stringstrCookiePa
10、th); 其中: userName:就是此用户的标示,用来标志此用户的唯一标示,不一定要映射到用户账户名称. createPersistentCookie:标示是否发出持久的Cookie。 若不是持久Cookie,Cookie的有效期Expiration属性有当前时间加上web.config中timeout的时间,每次请求页面时,在验证身份过程中,会判断是否过了有效期的一半,要是的话更新一次cookie的有效期;若是持久cookie,Expiration属性无意义,这时身份验证票的有效期