构建基于forms的验证机制过程如下:
 1,设置IIS为可匿名访问和asp.net web.config中设置为form验证
 2,检索数据存储验证用户,并检索角色(如果不是基于角色可不用)
 3,使用FormsAuthenticationTicket创建一个Cookie并回发到客户端,并存储
  角色到票据中,如:
  FormsAuthentication.SetAuthCookie(Username,true | false)
  cookies保存时间:
  HttpContext.Current.Response.Cookies[FormsAuthentication.FormsCookieName].Expires=DateTime.Now.AddDays(1)
 
  如果需要存储角色,采用:
 FormsAuthenticationTicket authTicket = new
 FormsAuthenticationTicket(
  1, // 版本号。
  txtUserName.Text, // 与身份验证票关联的用户名。
  DateTime.Now, // Cookie 的发出时间。
  DateTime.Now.AddMinutes(20),// Cookie 的到期日期。
  false, // 如果 Cookie 是持久的,为 true;否则为 false。
  roles ); // 将存储在 Cookie 中的用户定义数据。
  roles是一个角色字符串数组
  string encryptedTicket = FormsAuthentication.Encrypt(authTicket); //加密
 
  存入Cookie
  HttpCookie authCookie =
  new HttpCookie(FormsAuthentication.FormsCookieName,
  encryptedTicket);
 
  Response.Cookies.Add(authCookie);
 
 4,在Application_AuthenticateRequest事件中处理程序中(Global.asax)中,使用
  票创建IPrincipal对象并存在HttpContext.User中
  代码:
  HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName];
  FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);//解密
  string[] roles = authTicket.UserData.Split(new char[]{';'});//根据存入时的格式分解,;或|....
  Context.User = new GenericPrincipal(Context.User.Identity, Roles);//存到HttpContext.User中
 
 判断某个角色验证
 HttpContext.Current.User.IsInRole(roles)
 具体实现
 
 Web.config文件
 加入节点,name为COOKIE名称,loginUrl为没有通过验证跳转的地址
 <system.web>
  <authentication mode="Forms">
  <forms name="Hstear"
 loginUrl="login.aspx" protection="All" path="/" timeout="40"/>
  </authentication>
 </system.web>
 设置目录访问 path为目录名,roles为票据中的角色名
 发现网上的都说要单独一个WEB.CONFIG文件放在目录中,但实际在根目录中设置即可,单个文件也一样
 <location path="Admin">
  <system.web>
  <authorization>
  <allow roles="admin"/>
  <deny users="*"/>
  </authorization>
  </system.web>
 </location>
 Global.asax文件
 Application_AuthenticateRequest事件中加入
  protected void Application_AuthenticateRequest(Object sender, EventArgs e)   {  string cookieName = FormsAuthentication.FormsCookieName;  HttpCookie authCookie = Context.Request.Cookies[cookieName];  FormsAuthenticationTicket authTicket = null;  try  {   authTicket = FormsAuthentication.Decrypt(authCookie.Value);  }  catch(Exception ex)  {   return;  }    string[] roles = authTicket.UserData.Split(new char[]{','});//如果存取多个角色,我们把它分解    FormsIdentity id = new FormsIdentity( authTicket );    GenericPrincipal principal = new GenericPrincipal(id, roles);  Context.User =principal;//存到HttpContext.User中     }  
 原理,将用户角色信息保存在票据中,通过Global.asax,WEB.CONFIG中的设置,判断角色的权限

转载于:https://www.cnblogs.com/mybluesky99/archive/2011/06/14/2080493.html

FormsAuthenticationTicket基于forms的验证相关推荐

  1. ASP.NET Web下基于Forms的验证

    使用Forms验证,要实现对某个目录下的文件或某个文件不验证,可以按照如下方式来解决: 在Web.Config的<configuration>节下加入如下配置节: 1<locatio ...

  2. Asp.net中基于Forms验证的角色验证授权[转]

    Asp.net的身份验证有有三种,分别是"Windows | Forms | Passport",其中又以Forms验证用的最多,也最灵活. Forms 验证方式对基于用户的验证授 ...

  3. 【转载】Asp.Net中基于Forms验证的角色验证授权

    Asp.Net的身份验证有有三种,分别是"Windows | Forms | Passport",其中又以Forms验证用的最多,也最灵活. Forms 验证方式对基于用户的验证授 ...

  4. Asp.net中基于Forms验证的角色验证授权

    Asp.net的身份验证有有三种,分别是"Windows | Forms | Passport",其中又以Forms验证用的最多,也最灵活. Forms 验证方式对基于用户的验证授 ...

  5. [转][.NET 基于角色安全性验证] 之三:ASP.NET Forms 身份验证

    在开发过程中,我们需要做的事情包括: 1. 在 web.config 中设置 Forms 身份验证相关参数. 2. 创建登录页. 登录页中的操作包括: 1. 验证用户名和密码是否正确. 2. 创建身份 ...

  6. 实现基于 ASP.NET Forms 身份验证的跨子域单点登录

    对于跨应用程序的 ASP.NET Forms 身份验证,相信大家应该都不陌生,几年前很多文章都介绍了如何实现,比如 MSDN 的 跨应用程序进行 Forms 身份验证,唐朝程序员 的 ASP.NET站 ...

  7. Forms身份验证基本原理

    要采用Forms身份验证,先要在应用程序根目录中的Web.config中做相应的设置: <authentication mode="forms">     <fo ...

  8. ASP.NET Forms权限验证

    安全性是 ASP.NET Web 应用程序中一个非常重要的方面.它涉及内容非常广泛,不能在一篇文章内说明所有的安全规范,本文讲述如何利用Forms 身份验证构建安全的 ASP.NET 应用程序,它是目 ...

  9. .net Forms身份验证不能用在应用的分布式部署中吗?

    参照网上的一些方法,使用Forms身份验证对应用进行分布式部署,发现没有成功. 应用部署的两台内网服务器:192.168.1.19,192.168.1.87,使用Nginx做负载分配,配置完全相同:每 ...

最新文章

  1. wordpress模版post.php,WordPress主题开发手册
  2. 手把手带你入门Java中File类
  3. 22.网络提速(最短路)
  4. python输出等腰三角形代码_酷呆了!Python开发web应用的一些中级技巧
  5. 技术系列课|从0到1 构建实时音视频引擎
  6. 技术干货|基于Apache Hudi 的CDC数据入湖
  7. CodeForces - 1030C Vasya and Golden Ticket(思维)
  8. java程序执行的底层原理
  9. 课程作业----递归那些事
  10. 使用Servlet来连接数据库并在前端展示
  11. Scratch3.0----函数(2)
  12. access筛选末位数字为1或5_数字鸿沟理论不会用?北大必考常考,我们以快手短视频为例...
  13. 打印机无线连接台式机、笔记本找不到目标打印机解决方案
  14. Java job interview:WinForm界面特效设计案例导航图分享
  15. bitcode 是什么_dictate什么意思
  16. 多时点DID平行趋势检验
  17. 中俄博览会谈下大单 云从科技“展”露头角
  18. 创维E900V22C、E900V22D_语音更新-ROOT权限_线刷和卡刷固件包
  19. 前端开发:艺术字体ttf资源文件
  20. dy之__ac_signature

热门文章

  1. NoSql理解+传统关系型数据库ACID+Nosql的CAP+BASE的理解
  2. 在微型计算机中 存储容量为1kb 指的是,2016年计算机一级考试模板
  3. 【POJ - 1850】Code (组合数学,字符串另类排序)
  4. 【HDU - 1850】Being a Good Boy in Spring Festival (尼姆博弈,nim,异或前缀和)
  5. 关闭VS警告#pragma warning(disable:4996)
  6. ajax get请求成功,成功()函数的AJAX GET请求
  7. android设置window背景颜色,android – 设置标题背景颜色
  8. 求以下double数组的平均值(四舍五入保留两位小数):
  9. vue 断开正在发送的请求_vue 发送请求频繁时取消上一次请求
  10. Linux实验四:编译和调试工具的使用