FormsAuthenticationTicket基于forms的验证

构建基于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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/448322.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过公共汽车站

要求 通过班车站&#xff0c;应降低速度慢行&#xff0c;挂一挡通过&#xff0c;注意左右仔细查看。操作方法 1、减速慢行&#xff0c;注意观察公共汽车周围的交通情况&#xff0c;以防突然情况的出现; 2、在超越公共汽车时&#xff0c;注意提防公共汽车起步后突然向左转…

STL之函数适配器

1.理论知识 2.常用函数适配器 标准库提供一组函数适配器&#xff0c;用来特殊化或者扩展一元和二元函数对象。常用适配器是&#xff1a; 1绑定器&#xff08;binder&#xff09;: binder通过把二元函数对象的一个实参绑定到一个特殊的值上&#xff0c;将其转换成一元函数对象…

真正理解 git fetch, git pull 以及 FETCH_HEAD

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 真正理解 git fetch, git pull 要讲清楚git fetch&#xff0c;git pull,必须要附加讲清楚git remote&#xff0c;git merge 、远程rep…

pyqt5 + pyinstaller 制作爬虫小程序

环境:mac python3.7 pyqt5 pyinstaller ps: 主要是熟悉pyqt5, 加入了单选框 输入框 文本框 文件夹选择框及日历下拉框 效果图: pyqt5 主程序文件 # -*- coding: utf-8 -*- # Author: Mehaei # Date: 2019-07-10 13:02:56 # Last Modified by: Mehaei # Last Modified time…

通过学校区域

通过学校区域的要求 应观察前后左右的交通情况&#xff0c;适时减速慢行&#xff0c;不得鸣喇叭和与学生抢行。 操作方法 当驾驶车辆行至学校附近或有注意儿童标志路段时&#xff0c;一定要及时减速&#xff0c;注意观察道路两侧或周围的情况&#xff0c;时刻堤防学生横…

axios中出现两次请求,OPTIONS请求和GET请求

在项目中发现ajax中出现两次请求&#xff0c;OPTIONS请求和GET请求 查看到浏览器NetWork有两次请求&#xff0c;请求url一样&#xff1a; 查找原因是浏览器对简单跨域请求和复杂跨域请求的处理区别。 XMLHttpRequest会遵守同源策略(same-origin policy). 也即脚本只能访问相同协…

笔试面试收获(持续更新中)

1. Internet 是有ARPANET发展而来 2. NFS&#xff08;Network File System&#xff09;即网络文件系统 3. OSI参考模型七层&#xff1a;物理层&#xff0c;数据链路层&#xff0c;网络层&#xff08;IP,路由器&#xff0c;三层交换机&#xff09;&#xff0c;传输层&#xff…

Linux 安装 配置 Maven

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1.需要提前安装JDK&#xff0c;并且配置环境变量 请参考&#xff1a;https://blog.csdn.net/jiangyu1013/article/details/84321146 2.…

Threading in C#

这里推荐一些C#编程多线程的学习资料&#xff1a; http://knowledge.swanky.wu.googlepages.com/threading_in_c_sharp.html Ebook in English&#xff1a;http://cid-068f7d75d8585700.skydrive.live.com/self.aspx/ebook/threading.pdf 一些demo&#xff1a;http://cid-068f7…

经理人如何与这“六种人”打交道?

在职场中&#xff0c;我们要与不同身份、不同年龄、不同岗位、不同性别、不同性格的人打交道。在平时的实际工作接触中&#xff0c;善于与不同人打交道的经理人&#xff0c;会根据不同的情况用不同的态度和方式来对待之。 1、如何与死板的人打交道 与这样的人交往&#xff0c…

[Git高级教程 (一)] 通过 Tag 标签回退版本修复 bug

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1 前言 本系列之所以取名”Git高级教程”&#xff0c;主要是教大家解决实际工作中遇到的问题&#xff0c;要求读者会基本的Git用法和命令…

Javascript 自定义输出

缘由 前段时间再看了一些javascript的学习资料,也写的一些demo,在输出的时候一般都用alert,但这个方法会打断函数运行,用起来不是很好.还有就是console.log这个方法,这种方法原来一直以为只能在FireFox上面才能用,现在才发现主流浏览器都支持.但我的这个插件已经写的差不多了,所…

不要打2岁内和6岁后的孩子 父母必看

一位妈妈说&#xff1a;“孩子经常无理取闹&#xff0c;到超市就要买这买那&#xff0c;不给买就坐在地上哭闹。到别人家去就乱翻乱动&#xff0c;还会到人家沙发上乱蹦&#xff0c;无论你怎么说&#xff0c;孩子都不听话。每次我都会气不打一处来&#xff0c;回到家就痛打一顿…

设计模式之开放封闭原则

以下皆是个人理解如有不对请留言指出&#xff0c;谢谢&#xff01; 我就代码提出我自己个人的看法&#xff1a; 正常定义一个类例如银行工作员&#xff0c;他可以执行存款&#xff0c;付款和转账功能&#xff0c;如果在现有功能上我想添加贷款功能&#xff0c;需要在类中添加…

[Git高级教程(二)] 远程仓库版本回退方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1 简介 最近在使用git时遇到了远程分支需要版本回滚的情况&#xff0c;于是做了一下研究&#xff0c;写下这篇博客。 2 问题 如果提交了…

uplift model学习笔记

一、解决的问题&#xff1a; 通常的 Propensity Model 和 Response Model 只是给目标用户打了个分&#xff0c;并没有确保模型的结果可以使得活动的提升最大化&#xff1b;它没有告诉市场营销人员&#xff0c;哪个用户最有可能提升活动响应&#xff1b; 因此&#xff0c;需要另…

必须看透的50个错觉 人生要看透而不看破!

我们应该感谢命运的多喘&#xff0c;是它用历练使一颗脆弱心的渐渐变得坚强&#xff0c;变得对一切都充满了向往。无可否认&#xff0c;只有真正的经历了一些事物之后&#xff0c;你才会对人生看得更加透彻&#xff0c;才会对世间真情感悟的更加真切。 1、个人只能被现实改变…

设计模式之依赖倒置原则

在传统的过程式中&#xff0c;上层依赖于底层&#xff0c;当底层变化&#xff0c;上层也得跟着做出相应的变化。这就是面向过程的思想&#xff0c;弊端就是导致程序的复用性降低并且提高了开发的成本。 而面向对象的开发则很好的解决了这个问题&#xff0c;让用户程序依赖于抽象…

@Transactional 详解

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Transactional 是声明式事务管理 编程中使用的注解 1 .添加位置 1&#xff09;接口实现类或接口实现方法上&#xff0c;而不是接口类中…

LiveGBS高性能GB28181国标流媒体服务流传输模式支持UDP、TCP被动、TCP主动模式

LiveGBS国标(GB28181)流媒体服务软件&#xff1a; 提供用户管理及Web可视化页面管理&#xff1b; 提供设备状态管理&#xff0c;可实时查看设备是否掉线等信息&#xff1b; 实时流媒体处理&#xff0c;PS&#xff08;TS&#xff09;转ES&#xff1b; 设备状态监测、云台控制、录…