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

    详见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

  • 相关阅读:
    [HNOI2002]营业额统计 (Splay)
    [POJ1664] 放苹果 (动态规划,组合数学)
    [AHOI2009]维护序列 (线段树)
    类型转换求和
    懒人创造方法
    编程的精义
    10-instanceof
    9-接口
    6-SUPER关键字
    5-重写与重载
  • 原文地址:https://www.cnblogs.com/Code-life/p/9191370.html
Copyright © 2020-2023  润新知