身份验证票 和 form验证

转载 2007年09月17日 14:29:00
using System.Web.Security;

if((TextBox1.Text.Trim()=="a") && (TextBox2.Text.Trim()=="b"))
   {
    FormsAuthentication.SetAuthCookie(TextBox1.Text, false);
   }   
   else
   {
      HttpContext.Current.Response.Redirect(FormsAuthentication.GetRedirectUrl(TextBox1.Text, false), true);
      自动跳到Default.aspx
   }



身份验证票
构建基于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中

具体实现

Web.config文件
加入节点,name为COOKIE名称,loginUrl为没有通过验证跳转的地址
<system.web>

loginUrl="login.aspx" protection="All" path="/" timeout="40"/>


设置目录访问 path为目录名,roles为票据中的角色名
发现网上的都说要单独一个WEB.CONFIG文件放在目录中,但实际在根目录中设置即可,单个文件也一样

<system.web>






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中的设置,判断角色的权限

 

  1. 登陆

1)自定义身份验证票据

//使用 cookie 名、版本、目录路径、发布日期、过期日期、持久性以及用户定义的数据初始化 FormsAuthenticationTicket 类的新实例。
FormsAuthenticationTicket ticket= new FormsAuthenticationTicket(version,name,System.DateTime.Now,System.DateTime.Now.AddMinutes(20),isPersistent,"userData string ",cookiePath);
HttpCookie cookie 
= new HttpCookie(FormsAuthentication.FormsCookieName,FormsAuthentication.Encrypt(ticket));
cookie.Path 
= FormsAuthentication.FormsCookiePath;
if(isPersistent)
{
cookie.Expires 
= ticket.Expiration;
}

Response.Cookies.Add(cookie);

2)使用系统的验证票据
//为给定的 userName、createPersistentCookie 和 strCookiePath 创建身份验证票,并将其附加到 Cookie 的传出响应集合。它不执行重定向。
FormsAuthentication.SetAuthCookies(userName,isPersistent,cookiePath);


2.  验证
     

            try
            
{
                FormsAuthenticationTicket ticket 
= FormsAuthentication.Decrypt(Request.Cookies[FormsAuthentication.FormsCookieName].Value);
                
//已验证用户
            }

            
catch(Exception e)
            
{
                
//未验证用户;
            }

3. 退出

FormsAuthentication.SignOut();
Session.Abandon();

Forms身份验证基本原理

要采用Forms身份验证,先要在应用程序根目录中的Web.config中做相应的设置:              标签中的name表示指定要用于身份验证的HTTP Cookie(即指定Cooki...
  • guanglovemiao
  • guanglovemiao
  • 2014年02月21日 11:40
  • 2349

web实现basic与FORM验证

在web应用中,要经常对用户的身份进行验证的,但其实TOMCAT下配合SERVLET的话,也可以实现一些简单的验证,以往  可能大家都会忽略之,现再简单总结学习之。  1、BASIC验证机制 ...
  • aizijie123456789
  • aizijie123456789
  • 2015年04月02日 10:57
  • 134

Form身份验证基本原理

先说说Form身份验证思路:假设用户要浏览需要权限的页面,此时,安全机制先启动,检查当前用户请求是否持有用户票据的Cookie如此Cookie存在:解析Cookie中的票据信息,获得用户角色,创建用户...
  • lulu_jiang
  • lulu_jiang
  • 2010年06月10日 17:12
  • 6195

forms身份认证保护html页面

asp.net的forms身份认证保护是一个非常棒的东西,用VS2010创建一个Web应用程序即可看到范例在web.config中配置                              这样就...
  • yinffer
  • yinffer
  • 2011年07月13日 10:23
  • 1167

asp.net mvc forms身份认证

web.config配置 增加一个Attribute类,继承自AuthorizeAttributepublic class CustomAu
  • letmefish
  • letmefish
  • 2016年08月10日 16:44
  • 1926

IIS身份验证的配置

前4者配置:localhost applicationHost.config 后2者配置:web.config 要点: 这6项虽然列在一起,但在应用上却不是一个级别的; 前4者属于IIS验证,其...
  • after_
  • after_
  • 2014年09月28日 15:31
  • 1736

MVC 用户身份验证(FormsAuthentication、Cookie、Session)

一、FormsAuthentication         解释:当用户登录时,服务器为确认客户端通过验证要通过cookie向客户端写验证(Authenticat)信息,               ...
  • tiz198183
  • tiz198183
  • 2013年03月09日 14:28
  • 2710

【JSP/SERVLET】Tomcat内置表单身份验证

一、概述     前面是扯犊子的,JSP/SERVLET基于HTTP规范,提供了几种安全支持,BASIC、DIGEST、FORM、CLIENT-CERT,本文主要介绍一下FORM的安全支持开发,文末有...
  • reliveIT
  • reliveIT
  • 2015年06月16日 12:19
  • 1877

Web容器安全管理(下)——容器基本身份验证

为了更好地了解并实现Web容器的安全管理,笔者以两篇博客的篇幅来介绍,即:《Web容器安全管理(上)——Java EE的安全概念》 和 《Web容器安全管理(下)——容器基本身份验证》。上篇博客已经介...
  • fuzhongmin05
  • fuzhongmin05
  • 2017年06月12日 11:51
  • 647

c# 实现Form认证

ASP.NET 的安全认证,共有“Windows”“Form”“Passport”“None”四种验证模式。“Windows”与“None”没有起到保护的作用,不推荐使用;“Passport”我又没用...
  • czh4869623
  • czh4869623
  • 2012年08月13日 11:35
  • 1304
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:身份验证票 和 form验证
举报原因:
原因补充:

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