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给浏览器

详见FormAuthenticationModule源码

要在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错误吗。

详见UrlAuthorizationModule源码

小结:

Form Authentication是ASP.NET框架中内置的验证方式。其采用cookie作为验证ticket的保存方式,cookie默认是session内有效。

测试代码见https://github.com/lbwxly/Authentication

Web验证方式(2)--Form Authentication的更多相关文章

  1. Web验证方式(1)--Http Basic Authentication

    Http Basic Authentication是HTTP协议中定义的Web系统中的验证方式.参考wiki 主要的实现机制如下: 1. 用户通过浏览器匿名访问web资源. 2. web服务器检测到w ...

  2. Web验证方式(3)--OAuth 2.0协议

    介绍 OAuth协议是用来解决第三方应用程序访问Http Service的时候的认证问题.举个例子:某视频网站支持用户通过微信登陆,然后获取用户在微信上的图像信息. 在这个场景里 微信充当的就是Htt ...

  3. Web验证方式(4)--JWT

    OAuth协议中说到的AccessToken可以是以下两种: 1.任意只起到标识作用的字符串:这种情况下Resource Server处理请求时需要去找Authorization Server获取用户 ...

  4. 当ASP.NET Forms验证方式遭遇苹果IOS

    一.问题出现 我在用ASP.NET MVC4做微信开发的时候,用Forms验证方式做为authentication. 一般都是在web.config加: <authentication mode ...

  5. Asp.net Web Api 2 FORM Authentication Demo

    最近看了一点 web api 2方面的书,对认证都是简单介绍了下,所以我在这里做个简单Demo,本文主要是FORM Authentication,顺带把基本认证也讲了. Demo 一.FORM Aut ...

  6. Web.xml中四种验证方式

    源地址:https://blog.csdn.net/imimi_/article/details/78805642 <security-constraint> 的子元素 <http- ...

  7. Yii2在Form中处理短信验证码的Validator,耦合度最低的短信验证码验证方式

    短信验证码在目前大多数web应用中都会有,本文介绍一个基于Yii2 Validator方式的验证码验证方式. 在其他文章中看到的方式大多比较难做到一次封装,多次重用. 使用此方式的好处自然不用多说,V ...

  8. IIS下的身份验证方式管理

    设置.查看身份验证方式 #导航到某站点下: cd IIS:\Sites\DemoSite\DemoApp #启用站点test01下的Windows身份验证 Set-WebConfigurationPr ...

  9. Tomcat学习总结(5)——Tomcat容器管理安全的几种验证方式

    当访问服务器中受保护的资源时,容器管理的验证方法可以控制确认用户身份的方式.Tomcat支持四种容器管理的安全防护,它们是: BASIC (基本验证):通过HTTP验证,需要提供base64编码文本的 ...

随机推荐

  1. SQL学习笔记之项目中常用的19条MySQL优化

    在写文章之前,首先感谢 飞友科技 陆老师提供的文档.. 声明一下:下面的优化方案都是基于 “ Mysql-索引-BTree类型 ” 的 0x00 EXPLAIN 做MySQL优化,我们要善用 EXPL ...

  2. OpenCV中的新函数connectedComponentsWithStats使用

    主要内容:对比新旧函数,用于过滤原始图像中轮廓分析后较小的区域,留下较大区域. 关键字    :connectedComponentsWithStats 在以前,常用的方法是"是先调用 cv ...

  3. 20145335郝昊《网络对抗》逆向及Bof基础实践

    20145335郝昊<网络对抗>逆向及Bof基础实践 1.实践说明 本次实践是对一个名为pwn1的可执行Linux文件进行操作.程序的执行流程是:主函数main调用foo函数,foo将函数 ...

  4. Spring Data JPA 关系映射(一对一,一对多,多对多 )

    CascadeType.REMOVE 级联删除操作,删除当前实体时,与它有映射关系的实体也会跟着被删除.CascadeType.MERGE 级联更新(合并)操作,当Student中的数据改变,会相应地 ...

  5. java分布式系统开关功能设计(服务升降级)

     ​问题一:在单个java系统中如何实现开关功能? ​    ​其实对于开关来说,对应Java中的类型,很好映射,就是一个boolean值,在需要做开关操作的地方,调用这个属性,判断状态,然后走相应的 ...

  6. Factory Method(工厂方法)

    Factory Method(工厂方法) 意图: 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method 使一个类的实例化延迟到其子类. 适用性: 当一个类不知道它所必须创 ...

  7. callee 与 caller

    arguments.callee 在函数内部指向函数本身 1.函数调用 function sum (num){ if(num <= 1){ return 1; }else{ return num ...

  8. mytabits表关联一对一(多对一?)

    mytabits表关联一对一(多对一?) association联合 联合元素用来处理“一对一”的关系.需要指定映射的Java实体类的属性,属性的javaType(通常MyBatis 自己会识别).对 ...

  9. Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理

    Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理 转自:https://www.jianshu.com/p/2b71ea919d49 本系列文章首发于我的个人博 ...

  10. 114. Flatten Binary Tree to Linked List -- 将二叉树转成链表(in-place单枝树)

    Given a binary tree, flatten it to a linked list in-place. For example,Given 1 / \ 2 5 / \ \ 3 4 6 T ...