FormsAuthenticationTicket基于Forms的验证

转载 2007年10月12日 12:58: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文件

 加入节点,nameCOOKIE名称,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中的设置,判断角色的权限

 

基于FormsAuthentication的用户、角色身份认证 webapi中也有介绍

http://www.cnblogs.com/dedeyi/p/3424979.html
  • a5251199
  • a5251199
  • 2016年11月18日 11:55
  • 973

关于Forms 验证的完整解决方案

关于Forms 验证的完整解决方案代码! 下载地址: http://files.cnblogs.com/enric1985/LogSite-CustomSetting.rar 希望对于大家...
  • nic7968
  • nic7968
  • 2014年03月10日 04:29
  • 895

ASP.Net 2.0窗体身份验证机制详解(FormsAuthentication) (转载)

ASP.Net 2.0窗体身份验证机制详解(FormsAuthentication) (转载) ASP.Net 2.0窗体身份验证机制详解(FormsAuthentication) ...
  • stuwangjianglin
  • stuwangjianglin
  • 2014年11月12日 11:32
  • 686

HTML5 - 使用HTML5Forms让旧浏览器支持表单新特性,表单验证

对于不支持HTML5表单验证的浏览器,虽然我们可以先用Modernizr判断后使用自定义的验证代码。但如果表单很多,或者需要验证地方很多,那这样就略嫌麻烦。 我们还可以使用HTML5Forms.js...
  • u014063717
  • u014063717
  • 2016年03月17日 15:01
  • 452

forms验证的方式和使用

如何运用 Form 表单认证    ASP.NET 的安全认证,共有“Windows”“Form”“Passport”“None”四种验证模式。“Windows”与“None”没有起到保护的作用,不推...
  • albert528108
  • albert528108
  • 2015年04月03日 11:16
  • 319

forms表单验证

在ASP.NET应用程序中,有四种验证方式:Windows验证、表单验证、Passpord验证、自定义验证。         最近在看表达验证,在这里给大家分享下我的经验。         要实现...
  • ybealq
  • ybealq
  • 2013年05月19日 23:14
  • 354

Asp.net中基于Forms验证

Asp.net中基于Forms验证的角色验证授权 Asp.net的身份验证有有三种,分别是"Windows | Forms | Passport",其中又以Forms验证用的最多,也最灵活。 Fo...
  • ffstarff
  • ffstarff
  • 2013年03月05日 15:22
  • 294

通过FormsAuthentication类实现自动登录

本页内容 目标 适用范围 如何使用本章内容 摘要 您必须了解的背景知识 创建一个具有登录页的 Web 应用程序 ...
  • huangwenhua5000
  • huangwenhua5000
  • 2013年02月26日 13:56
  • 1019

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

Asp.net的身份验证有有三种,分别是"Windows | Forms | Passport",其中又以Forms验证用的最多,也最灵活。 Forms 验证方式对基于用户的验证授权提供了很好的支持...
  • lwj0310
  • lwj0310
  • 2014年06月21日 11:42
  • 293

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

http://www.cnblogs.com/whtydn/archive/2009/10/21/1587240.html Asp.net的身份验证有有三种,分别是"Windows | Form...
  • mituan1234567
  • mituan1234567
  • 2013年07月31日 21:25
  • 342
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:FormsAuthenticationTicket基于Forms的验证
举报原因:
原因补充:

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