asp.net中的權限管理-基於Forms的角色授權的基本步驟

本文详细介绍了在ASP.NET中如何通过Forms身份验证实现角色授权,包括配置Web.config、登录验证及角色信息保存、角色恢复及权限配置等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面是進行角色授權的幾個基本步驟:

1.設定身份驗證方式為Forms

应用程序根目录中的Web.config中做如下设置:

<authentication mode="Forms"> 
    
<forms name=".ASPXAUTH" loginUrl="/login.aspx" protection="All" timeout="30" path= "/">
    
</forms> 
</authentication>

下面再對forms節點中的屬性做一些說明:
1>name: 指定完成身份验证的Http cookie的名称,默認值為.ASPAUTH,可以改成其它任意字串.
2>loginUrl: 如果未通过验证或超时后重定向的页面URL,一般为登录页面,让用户重新登录
3>Protection: 指定 cookie数据的保护方式.
  可设置为: All None Encryption Validation四种保护方式
  a. All表示加密数据,并进行有效性验证两种方式
  b. None表示不保护Cookie.
  c. Encryption表示对Cookie内容进行加密
  d. validation表示对Cookie内容进行有效性验证
4>TimeOut: 指定Cookie的失效时间,單位分鐘, 超时后要重新登录.
5>path:cookie保存的位置,設定cookie時用到的路徑要與其保持一致


2.進行身份驗證,並將角色信息保存在cookie中

    protected void Buttonlogin_Click(object sender, System.EventArgs e)
      {
          
string user = this.TextBox1.Text; //读取用户名
          string password = TextBox2.Text; //读取密码
          if (Confirm(user, password) == true//confirm方法用来验证用户合法性的
          {
              
string userRoles = UserToRole(user); //调用UserToRole方法来获取role字符串
              FormsAuthenticationTicket Ticket = new FormsAuthenticationTicket(1, user, DateTime.Now, DateTime.Now.AddMinutes(30), false, userRoles, "/"); //建立身份验证票对象
              string HashTicket = FormsAuthentication.Encrypt(Ticket); //加密序列化验证票为字符串
              HttpCookie UserCookie = new HttpCookie(FormsAuthentication.FormsCookieName, HashTicket);
              
//生成Cookie
              Context.Response.Cookies.Add(UserCookie); //输出Cookie到客户端
              Context.Response.Redirect(Context.Request["ReturnUrl"]); // 重定向到用户申请的初始页面
          }
          
else
          {
              
// 用户身份未被确认时的代码
          }
      }
    
//此方法用来验证用户合法性的
    private bool Confirm(string user, string password)
    {
        
//相应的代码
    }
    
//此方法用来获得的用户对应的所有的role用逗号分割的一个字符串
    private string UserToRole(string user)
    {
        
//相应的代码
    }

 3.在服务端將角色恢复到GenericPrincipal对象中

在Global.asax中的Application_AuthenticateRequest事件中新增以下內容

 protected void Application_AuthenticateRequest(object sender, System.EventArgs e)
    {
        
//在這裡設定用戶的角色
        
        HttpApplication App 
= (HttpApplication)sender;
        HttpContext Ctx 
= App.Context; //获取本次Http请求相关的HttpContext对象
        if (Ctx.Request.IsAuthenticated == true//验证过的用户才进行role的处理
        {
            FormsIdentity Id 
= (FormsIdentity)Ctx.User.Identity;
            FormsAuthenticationTicket Ticket 
= Id.Ticket; //取得身份验证票
            string[] Roles = Ticket.UserData.Split(','); //将身份验证票中的role数据转成字符串数组
            Ctx.User = new GenericPrincipal(Id, Roles); //将原有的Identity加上角色信息新建一个GenericPrincipal表示当前用户,这样当前用户就拥有了role信息
        }
    }

4.配置權限
方法1.在每個頁面的Page_Load中判斷角色,從而分配權限.

if( HttpContext.Current.User.IsInRole(rolename) ) 

//相应的代码

方法2.在web.config中配置權限

  1>對整個站點設定權限,在<configuration><system.web>節點下增加如下內容:

    <authorization>
      
<deny users="?"/><!--拒絕匿名訪問-->
    
</authorization>

  2>對目錄或單個文件設定權限,在<configuration>節點下新增以下內容:

 <location path="admin"><!--對admin目錄設定權限,也可對單個文件設定權限-->
  
<system.web>
   
<authorization>
    
<allow roles="Admin"/> <!--只有Admin才能访问admin目录-->
    
<deny users="*"/> <!--拒絕所有人訪問-->
   
</authorization>
  
</system.web>
 
</location>

方法3.在实体上封装,具体你可以看.text asp.netforums这些优秀项目的实现


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值