.net的身份验证(专记,不断更新中.....)

   由于作者水平有限,本文可能存在很多问题,希望大家提出,谢谢      

 一、.net的验证模式有四种

              windows:将 Windows 验证指定为默认的身份验证模式

              Forms:  (重点) 将 ASP.NET 基于窗体的身份验证指定为默认身份验证模式

              passport:将 Microsoft Passport Network 身份验证指定为默认身份验证模式

              none:不指定任何验证模式,提供匿名用户查找

  

             最重要的forms验证开始学习

                  第一我们了解webconfig中authentication节点

                   <authentication mode="Forms">
                      <forms name="userInfor" loginUrl="~/Login.aspx" timeout="30" defaultUrl="~/Default.aspx" cookieless="AutoDetect"/>
                  </authentication>    

                        cookieless:    获取或设置一个值,该值指示是否使用 Cookie 标识客户端会话  

                                          如果所有请求都被视为无 Cookie,则为 true;如果没有任何请求被视为无 Cookie,则为 false;或者为 HttpCookieMode 值之一

                                          默认值为 UseDeviceProfile ;

成员名称 说明
UseUri 该调用功能使用查询字符串来存储标识符,无论浏览器或设备是否支持 Cookie。
UseCookies 使用 Cookie 保持用户数据,无论浏览器或设备是否支持 Cookie。
AutoDetect ASP.NET 确定请求浏览器或设备是否支持 Cookie。 如果请求浏览器或设备支持 Cookie,则 AutoDetect 使用 Cookie 来保持用户数据;否则在查询字符串中使用标识符。 如果浏览器或设备支持使用 Cookie,但当前 Cookie 被禁用,请求功能仍将使用 Cookie。
UseDeviceProfile ASP.NET 根据 System.Web.HttpBrowserCapabilities 设置来确定是否使用 Cookie。 如果该设置指示浏览器或设备支持 Cookie,则使用 Cookie;否则在查询字符串中使用标识符。

                       defaultUrl :定义在身份验证之后用于重定向的默认 URL。默认值为 default.aspx ;

                       loginUrl:指定如果找不到任何有效的身份验证 Cookie,将请求重定向到的用于登录的 URL。默认值为 login.aspx

                       name:指定要用于身份验证的 HTTP Cookie。默认值为 ".ASPXAUTH" ;如果正在一台服务器上运行多个应用程序,并且每个应用程序都需要唯一的Cookie,则必须在每个应用程序的 Web.config 文件中配置 Cookie 名称。

                       slidingExpiration :指定是否启用弹性过期时间。

                                 > True 指定启用弹性过期时间。在单个会话期间,身份验证 Cookie 被刷新,并且每个后续请求的到期时间被重置。在 .NET Framework 1.x 版中,默认值为 True。

                               >  False 指定不启用可调过期,并指定 Cookie 在最初发出之后,经过一段设定的时间间隔后过期。在 .NET Framework 2.0 版中,默认值为 False。

                       timeout :指定 Cookie 过期前逝去的时间(以整数分钟为单位)。如果 SlidingExpiration 属性为 true,则 timeout 属性是滑动值,会在接收到上一个请求之后的指定时间(以分钟为单位)后过期。为防止危及性能并避免向开启 Cookie 警告的用户发出多个浏览器警告,当指定的时间逝去大半时将更新 Cookie。这可能导致精确性受损。持久性 Cookie 不超时。默认值为 "30"(30 分钟)。

               第二FormsAuthentication这个类,是管理表单验证的类

                     这里先介绍常用方法

                     RedirectFromLoginPage :调用此方法, 将经过身份验证的用户重定向回最初请求的 URL 或默认 URL(defaultUrl )                    

                     RedirectToLoginPage :  重定向至登录页(loginUrl)

                     SetAuthCookie  :设置用户存储至cookie中

                     SignOut :      从浏览器删除 Forms 身份验证票证。

                     Decrypt :将加密后用户信息字符串作为参数传入后,可以转化为FormsAuthenticationTicket 对象可以查看用户信息

                     Encrypt :创建一个字符串,其中包含适用于 HTTP Cookie 的加密的 Forms 身份验证票证    接受参数为FormsAuthenticationTicket ticket
                     GetAuthCookie :通过用户名创建一个cookie

                        第一种:需要往formsAuthenticationTicket中存储除了用户名以外的信息

                           formsAuthenticationTicket(int version,string name,DateTime issueDate,DateTime expiration,string userData,string cookiePath)

                            version:票证的版本号   一般为1

                             name:与身份验证关联的用户名    

                             issueDate:票证发出时的本地日期和时间

                             expiration:票证过期时的本地日期和时间

                             isPersistent:如果票证将存储在持久性cookie(跨浏览器绘话保存)true:保存,false:不保存

                             userData:存储在票证中的用户特定的数据(一般可以存储权限东西的)

                             cookiePath:票据存储在Cookie中的路径

                         

                    例子:

                  一、简单的用户票证存储

                       

代码
    //假设验证成功的用户
            string userId = "xiaoxiaocainiao";            

            
//从其他地方取得用户角色数据
            FormsAuthentication.SetAuthCookie(userId, false);

            
//取出内容
            string sTicket=  Response.Cookies["userInfor"].Value;
            FormsAuthenticationTicket formTicket
= FormsAuthentication.Decrypt(sTicket);

 

                     注:这种插入的票证,只能简单存储用户名,虽然也可以取出了

               二、除了插入用户名外还可以插入一些特有信息比如role(权限)

                     

代码
      //假设验证成功的用户
             userId = "xiaoxiaocainiao";  
            
//创建身份票证
            FormsAuthenticationTicket Ticket = new FormsAuthenticationTicket(1, userId, DateTime.Now, DateTime.Now.AddMinutes(30), true,"rol123");
            
//加密身份票证
            string HashTicket = FormsAuthentication.Encrypt(Ticket); 
            
//将身份票证转化为Cookie保存至Cookie中 
            HttpCookie UserCookie = new HttpCookie(FormsAuthentication.FormsCookieName, HashTicket);
        
            Context.Response.Cookies.Add(UserCookie);

 

             注:取出身份票证的时候就可以取出   userData:rol123

                 

                  System.Web.HttpCookie是服务器端通过http请求从客户端获取的Cookie(服务器端用)  身份请求时时服务端发给客户端的

                 System.Net.Cookie是表示客户端程序通过http响应接收到的Cookie(客户端程序用)

 

 

 

 

                     

                     

posted @ 2010-12-14 22:18  菜鸟吃虫,虫吃菜  阅读(3218)  评论(0)    收藏  举报