Form验证方式并非HTTP标准,而是在微软ASP.NET Web框架下提供的一种验证方式。其大体流程以下:git
在上图的流程中,ASP.NET框架提供了以下支持类:( FormsAuthentication, FormsAuthenticationModule )github
在上面流程图中的第三步中,咱们对用户名密码进行验证后。web
-能够建立FormAuthenticationTicket对象,将用户数据存入其中。浏览器
-而后调用FormAuthentication类的工具方法Encrypt获得加过密的ticket字符串cookie
-将加过密的ticket字符串写入名为FormAuthentication.FormCookieName的cookie中session
-后续的请求中,浏览器都会带上该cookie.框架
在上面流程图第四步中,FormAuthenticationModule会在IIS的Authenticate事件中进行请求拦截工具
-对请求中携带的名为FormAuthentication.FormCookieName的cookie值进行验证(解密)测试
-若是验证经过,用cookie中携带的用户信息建立GenericPrinciple对象并保存在当前请求的HttpContext中,并将该请求设为Authenticatedurl
-若是验证不经过,或者没有找到对应的cookie,则返回401给浏览器
要在ASP.NET应用中开启Form Authenticate验证方式,只需添加以下配置到<system.web>配置节:
<authentication mode="Forms"> <forms loginUrl="Login" name="JW.Auth" />//此处定义了登陆url和cookie的名字 </authentication>
上面的流程图中有一个环节尚未描述到,步骤1和步骤4中会对用户进行验证是否有访问改页面的权限。ASP.NET中能够经过以下配置到<system.web>配置节来拒绝未登陆用户:
<authorization> <deny users="?"/>//此处拒绝全部为登陆用户,此处还能够添加<allow>节点容许特定用户,role发起特定的http method,可是没有与url的映射起来感受有点鸡肋了。实际项目中能够实现本身的验证逻辑 </authorization>
ASP.NET框架是经过上面类图中的UrlAuthorizationModule这个Http Module在IIS的Authorization Request环节对请求按照配置进行受权。未受权的请求则返回401错误吗。
小结:
Form Authentication是ASP.NET框架中内置的验证方式。其采用cookie做为验证ticket的保存方式,cookie默认是session内有效。