Web验证方式(2)--Form Authentication
Form验证方式并不是HTTP标准,而是在微软ASP.NET Web框架下提供的一种验证方式。其大致流程如下:
在上图的流程中,ASP.NET框架提供了如下支持类:( FormsAuthentication, FormsAuthenticationModule )
在上面流程图中的第三步中,我们对用户名密码进行验证后。
-可以创建FormAuthenticationTicket对象,将用户数据存入其中。
-然后调用FormAuthentication类的工具方法Encrypt得到加过密的ticket字符串
-将加过密的ticket字符串写入名为FormAuthentication.FormCookieName的cookie中
-后续的请求中,浏览器都会带上该cookie.
在上面流程图第四步中,FormAuthenticationModule会在IIS的Authenticate事件中进行请求拦截
-对请求中携带的名为FormAuthentication.FormCookieName的cookie值进行验证(解密)
-如果验证通过,用cookie中携带的用户信息创建GenericPrinciple对象并保存在当前请求的HttpContext中,并将该请求设为Authenticated
-如果验证不通过,或者没有找到对应的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内有效。
测试代码见https://github.com/lbwxly/Authentication
最新文章
- iOS开发系列--Objective-C之类和对象
- 第二周:Java For循环方法简介
- JAVA-Excel文件操作
- php开发工具。。
- Flex开发一周年感悟
- Redis使用介绍
- Timeout expired超时时间已到. 达到了最大池大小 错误及Max Pool Size设置
- 从source folder 下将其所有子文件夹的*.* 文件拷贝到 target folder (不拷贝文件夹名仅拷贝文件)
- C# DateTimePicker控件如何精确设置显示时分秒
- Mybatis Generator最完整配置详解
- Mac 上开启一个简单的服务器
- 使用inno setup制作安装包
- CvIntHaarClassifier
- Java——final关键字
- mybatis从mapper接口跳转到相应的xml文件的eclipse插件
- SQL Server - 约束 CONSTRAINT
- eclipse中将一个项目作为library导入另一个项目中
- Windows使用Idea编译spark源码
- 【整理】HTML5游戏开发学习笔记(2)- 弹跳球
- [转]PostgreSQL教程(十六):系统视图详解
热门文章
- Python笔记 #17# Pandas: Merge
- Python笔记 #11# 统计图定制化
- Linux学习笔记之Linux通过yum安装桌面
- javascript-高级用法
- ExtJS错误解决 Cannot read property &#39;on&#39; of undefined
- 使用 v-cloak 防止页面加载时出现 vue.js 的变量名
- .Net web 关于表单标题
- CSU 1968 Permutation Descent Counts
- 动态规划-背包问题 Knapsack
- java中如何使用Junit测试