jiaozhu

View Post

用户身份验证以及角色授权

1.用户的身份验证

  用户的三种验证方式:Windows、Forms、Passport
                      Windows是默认的身份验证方式,它是根据机器的访问权限来判断的
                      Passport是微软提供的验证方式
                      Forms就是表单验证,提供了以身份ID和密码的形式进行验证和授权管理功能


2.认证用户的原理
  用户登录的时候给用户一个表明身份的票据,以后用户登录的时候通过这个票据就能知道这个用户已经被注册


3.Forms验证设置的流程

  a.配置web.config启用Froms验证

    <authentication mode="Forms">
 <forms defaultUrl="Default.aspx" loginUrl="Login.aspx"></forms>
    </authentication>   

  b.配置授权设置

    <authorization>       
        <allow users="*"/> //允许所有用户,我们也可以设置特定的ID用户访问
        <deny users="?"/>  //拒绝匿名用户
    </authorization>
 
    注意:
         先写allow,在写deny,否则会出现问题
       
  c.登陆页面中生成用户票据便于其他页面访问
 
    FormsAuthentication.SetAuthCookie(userid, true);  //为用户创建一个票证,并将其放入cookie或者url中


4.文件夹内授权设置

  a.在文件夹内添加一个web.config配置文件
 
  b.在里面配置授权设置


5.用户角色授权

   a.生成票据:

     string userId="admin";
     string pass="123";
     string roles="Adminstrator"; //从其他地方取得用户角色数据
     FormAuthenticationTicket Ticket=new FormAuthentication(1,userId,DateTime.Now,DataTime.Now.AddMinutes(30),true,roles); //建立身份验证票对象
     string HashTicket=FormsAuthentication.Encrypt(Ticket); //加密序列化验证为字符串
     HttpCookie UserCookie=new HttpCookie(FormAuthentication.FormsCookieName,HashTicket); //生成Cookie
     Context.Response.Cookies.Add(UserCookie); //票据写入Cookie
     Response.Redirect("Info.aspx");

 
   b. 给用户票据的时候在里面加了一个字符串的角色信息,比如“Administrator”,当一个请求过来的时候asp.net会有一个Application_AuthenticateRequest的事件,专门用于用户认证授权,在         这个事件中我们只需要将这个字符表达的角色重建给用户就可以,我们在Global.asax的Application_AuthenticateRequest方法中增加如下代码:

     protected void Application_AuthenticateRequest(object sender,EventArgs e)
     {
       HttpApplication app=(HttpApplication)sender;
       HttpContext context=app.Context; //获取本次Http请求的HttpContext对象
       if(context.Request.IsAuthenticated) //验证过的一般用户才能进行角色验证
       {
          FormsIdentity Id=(FormsIdentity)context.User.Identity; //当前用户标识
          FormsAuthenticationTicket Ticket=Id.Ticket; //取得身份证票
          string[] Roles=Ticket.UserData.Split(\',\'); //将角色数据专程字符串数组,得到相关的角色信息
          context.User=new System.Security.Principal.GenericPrincipal(Id,Roles); //重新生成带有角色信息的用户
       }
     }
     }


   c.更改配置文件,设置info.aspx页面只有Adminstrator的角色才可以访问,代码如下:

     <location path="Info.aspx">
       <system.web>
          <authorization>
            <allow roles="Adminstrator"/>
            <deny users="*"/>
          </authorization>
       </system.web>
     </location>

 

 

 

 

 

 

 

 

 


   
   

 

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-10-03
  • 2021-09-14
  • 2021-06-22
  • 2022-02-16
  • 2021-10-09
  • 2021-11-23
猜你喜欢
  • 2022-12-23
  • 2021-11-03
  • 2022-12-23
  • 2021-09-17
  • 2021-12-03
  • 2021-10-11
相关资源
相似解决方案