FormsAuthenticationTicket基于forms的验证

转载 2007年09月26日 16:32:00
构建基于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中的设置,判断角色的权限

相关文章推荐

asp.net FormsAuthenticationTicket基于forms的验证

1,设置IIS为可匿名访问和asp.net web.config中设置为form验证2,检索数据存储验证用户,并检索角色(如果不是基于角色可不用)3,使用FormsAuthenticationTick...

forms表单验证

在ASP.NET应用程序中,有四种验证方式:Windows验证、表单验证、Passpord验证、自定义验证。         最近在看表达验证,在这里给大家分享下我的经验。     &#...

Asp.Net Forms验证(自定义、角色提供程序、单点登录)

Asp.Net Forms验证(自定义、角色提供程序、单点登录) 以前开发项目时经常是自己开发一套用户权限管理系统进行验证,比较灵活。最近为了单点登录的问题又把Asp.Net...

光脚丫学ASP.NET MVC(0004):在ASP.NET MVC中使用Forms身份验证

光脚丫思考  QQ:524130780邮箱:524130780@QQ.COM博客:http://blog.csdn.net/GJYSK视频演示01:http://u.115.com/file/bh0b...
  • gjysk
  • gjysk
  • 2011-07-11 15:23
  • 1568

Forms验证简介

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

asp.net Forms身份验证详解

在做网站的时候,都会用到用户登录的功能。对于一些敏感的资源,我们只希望被授权的用户才能够访问,这让然需要用户的身份验证。对于初学者,通常将用户登录信息存放在Session中,笔者在刚接触到asp.ne...

使用“成员资格管理用户”以及“Forms 身份验证提供程序”保护需要授权才能访问的资源

已经蛋疼很久了——闲的!!! 这两天闲来无事,终于醒悟了,但苦于不知道该如何“进步”,无奈。 千思万熬过后,字典——“MSDN”出现了,OK就这么着吧!!! 下面说说这个这个测试项目...

asp.net Forms身份验证详解

在做网站的时候,都会用到用户登录的功能。对于一些敏感的资源,我们只希望被授权的用户才能够访问,这让然需要用户的身份验证。对于初学者,通常将用户登录信息存放在Session中,笔者在刚接触到asp.ne...

ASP.NET Forms权限验证

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

asp.net登录 用Forms身份验证和基于角色的分目录访问

Forms身份验证用来判断是否合法用户,当用户合法后,再通过用户的角色决定能访问的页面。主要思想:Forms身份验证用来判断是否合法用户,当用户合法后,再通过用户的角色决定能访问的页面。 具体步骤: ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)