ASP.NET Forms验证(自定义、角色提供程序)1

以前开发项目时经常是自己开发一套用户权限管理系统进行验证,比较灵活。最近为了单点登录的问题又把Asp.Net自带的验证方式看了一遍,发现这种方式也比较方便,功能也还可以。在Asp.Net提供了三种常用的验证方式:Windows方式是和IIS结合起来可以实现基本、摘要、集成 Windows等身份验证;Passport方式是使用Windows Live ID的帐户来进行统一验证的;Forms方式是使用常见的表单来实现验证。

本文主要就是讨论Forms验证方式普通实现、自定义实现、自定义角色提供程序、如何单点登录(可和MOSS结合)等几个方面。

一、普通实现方式

这种方式是最简单的,只需要配置一下就可以了。

1、执行aspnet_regsql命令建立数据库

aspnet_regsql命令在C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727目录下,按提示运行就可以了

2、新建一个web网站

在Web.Config中加入配置:

  <connectionStrings>
    
<add name="MySqlConnection" connectionString="Data Source=dbserver;Initial Catalog=database;user id=userid;password=****;" />
  
</connectionStrings>

  
<system.web>
        
<authorization>
            
<deny users="?"/>
        
</authorization>
        
<authentication mode="Forms">
            
<forms loginUrl="login.aspx" name=".ASPXAUTH"/>
        
</authentication>

    
<membership defaultProvider="SqlProvider">
      
<providers>
        
<clear />
        
<add connectionStringName="MySqlConnection" applicationName="MyApplication"
           enablePasswordRetrieval
="false" enablePasswordReset="true" requiresQuestionAndAnswer="true"
           requiresUniqueEmail
="true" passwordFormat="Hashed" name="SqlProvider"
           type
="System.Web.Security.SqlMembershipProvider" />
      
</providers>
    
</membership>

  
</system.web>

主要就是指定Forms验证使用的数据库,如果不指定数据库会使用本机默认的aspnetdb 数据库

deny users="?"表示不允许匿名用户访问,也就是说当匿名用户访问时自动跳转到下面配置的login.aspx页面。
至于authorization和authentication节的其他属性可以参考MSDN,里面有很详细的介绍。

3、在网站里创建Default.aspx和Login.aspx页面

在Login.aspx页面里面放入LoginCreateUserWizard控件(因为我们新建的库中一个用户也没有,CreateUserWizard控件只是用来建立测试用户的,建好用户后可以把这个控件删除)
在Default.aspx页面中随便放入一些内容。

当我们访问Default.aspx时就会自动转入Login.aspx进行验证了。

二、自定义实现方式

采用第一种方式时会要求建立一个数据库,很多表,可能并不符合我们自己的业务要求。可以使用以下的自定义方式

1、利用Login控件的Authenticate事件

这个事件就是用来进行验证的,可以通过指定true值表示验证通过:

     protected void Login1_Authenticate( object sender, AuthenticateEventArgs e)
    
{
        
//判断用户名密码是否正确
        
//
         e.Authenticated = true;
     }

2、完全抛开Login等控件,自己写代码

其实Login控件的核心主要也就是往Cookie里面放入一些值,那么我们可以在自己的代码中来进行这个操作:

    protected void Button1_Click(object sender, EventArgs e)
    {
        
//判断用户名密码是否正确
        
//.
         FormsAuthentication.SetAuthCookie(userName, false);
        
if (Context.Request["ReturnUrl"] != null)
        
{
             Response.Redirect(Context.Request[
"ReturnUrl"]);
         }

        
else
        
{
             Response.Redirect(FormsAuthentication.DefaultUrl);
         }

     }

采用以上两种方式就不用建立默认的数据库了,直接使用我们的逻辑进行验证操作

三、自定义角色提供程序

以上说的都是用户级别的验证,在有的情况下需要根据角色来进行验证,比如指定某个目录或某个aspx文件只能让哪几个角色的用户访问,根据角色来控制的话比较方便灵活。

1、在登录验证的时候把角色信息也保存到Cookie中去:

     protected void Button1_Click( object sender, EventArgs e)
    
{
        
//判断用户名密码是否正确
        
//.

        
//得到用户的角色,测试时暂时写死
        string userRoles = "Admins,testst";
         FormsAuthenticationTicket Ticket
= new FormsAuthenticationTicket(1, user, DateTime.Now, DateTime.Now.AddMinutes(30), false, userRoles, "/");
        
string HashTicket = FormsAuthentication.Encrypt(Ticket);

        
//把角色信息保存到Cookie中去
         HttpCookie UserCookie = new HttpCookie(FormsAuthentication.FormsCookieName, HashTicket);
         Response.Cookies.Add(UserCookie);

        
if (Context.Request["ReturnUrl"] != null)
        
{
             Response.Redirect(Context.Request[
"ReturnUrl"]);
         }

        
else
        
{
             Response.Redirect(FormsAuthentication.DefaultUrl);
         }

     }

把角色信息加密成特定的格式保存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值