ASP.NET2.0 MemberShip RoleManager详解及配置

 

一套完善的用户权限系统少不了成员和角色的管理,而权限系统相对于网站的其他部分又相对独立。ASP.NET 2.0把成员和角色管理封装成了一个完整的系统。对于小型的系统,我们可以使用登录控件和ASP.NET网站管理工具来实现成员和角色管理(无需编写一行代码),对于大型的系统,我们也可以使用ASP.NET 2.0成员资格和角色管理器API来编码实现自定义的成员和角色管理。

  ASP.NET 2.0成员资格负责用户的管理,角色管理器负责角色的管理,登录控件负责面向用户的成员服务(注册、登录、修改和取回密码),ASP.NET表单验证负责用户凭据的管理,ASP.NET网站管理工具负责面向管理员的安全配置,ASP.NET基于URL的授权负责用户角色对于目录的授权管理,一套完整的用户、角色和权限管理系统就这样诞生了。
 

1.    成员资格概述

 
ASP.NET 成员资格为我们提供了一种验证和存储用户凭据的内置方法。因此,ASP.NET成员资格可以帮助我们管理网站中的用户身份验证。可以将ASP.NET成员资格与基于表单的身份验证或ASP.NET登录控件一起使用,以创建一个完整的用户身份验证系统。ASP.NET成员资格支持下列功能:

 
· 创建新用户和密码。

 
· 将成员资格信息(用户名、密码和支持数据)存储在Microsoft SQL ServerActive Directory或其他数据存储区。

 
· 对访问站点的用户进行身份验证。可以以编程方式验证用户,也可以使用 ASP.NET 登录控件创建一个只需很少代码或无需代码的完整身份验证系统。

 
· 管理密码,包括修改和找回密码。

 
· 公开经过身份验证的用户的唯一标识,可以在我们自己的应用程序中使用该标识,也可以将该标识与 ASP.NET 个性化设置和角色管理(授权)系统集成。

 
· 指定自定义成员资格提供程序,这使我们可以改为用自己的代码管理成员资格及在自定义数据存储区中维护成员资格数据

  ASP.NET
成员资格系统的设计目的主要是用于 ASP.NET 登录控件和 ASP.NET表单验证。也就是说,成员资格系统对于那些需要在程序中获取用户凭据并进行验证的应用程序最为有用。当然,也可以将 ASP.NET 成员资格用于任何自定义的身份验证系统。

 

2.成员资格的配置

 
要使用成员资格,首先需要使用membership元素的defaultProvider属性来指定默认的成员资格提供程序。如果没有显式指定默认的提供程序,计算机配置将指定一个名为AspNetSqlMembership ProviderSqlMembershipProvider实例(它被标识为默认的提供程序)。 AspNetSqlMembershipProvider连接到本地SQL Server中的aspnetdb数据库。但是如果你不希望成员资格使用默认的Express数据库,或者希望自定义成员资格的一些属性,那么就需要自定义一个成员资格提供程序。

<configuration>

<connectionStrings>

<add name="MySqlConnection" connectionString="server=srv-devdbhost;uid=sa;pwd=Abcd1234;

database=aspnetdb" />

</connectionStrings>

<system.web>

<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">

<providers> <!—下面重写provider配置-->

<clear />

<add name="SqlProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="MySqlConnection" applicationName="MyApplication"

</providers>

</membership>

</system.web>

</configuration>

 

 

注意以下几点。
 
· <membership>节点的userIsOnlineTimeWindow属性表示用户多少分钟不活动后被视为下线。

 
· 增加一个自定义的SqlServer成员资格提供程序必须指定nametypeconnectionStringNameapplicationName 4个属性,其他属性见下表。[providers标签的<add>节点的属性]

 

 

 

· 在这里我们配置了一个自定义成员资格提供程序,并使用srv-devdbhost服务器上的aspnetdb[也可以是自己数据库,比如你已经建立好的且没有成员及角色管理表的数据库,可以把应用程序角色关系表添加到现有的数据库]数据库。因此,需要先使用aspnet_regsql工具来注册数据库,步骤如下。

 
1).打开Visual Studio 2005命令行提示,输入aspnet_regsql,出现如图15-23所示的对话框。

 

 

 

2).单击“下一步”按钮,选择“为应用程序服务配置SQL Server”项,如图15-24所示。


 

 

3).填写目标数据库的连接信息,如图15-25所示。

 

 

 

 
 
4).在确认了所有信息后,单击“完成”按钮,这样用于ASP.NET服务的数据库就在目标数据库上创建完成了。

 

成员资格API编程

 
有时候,需要对成员身份进行更高级别(比Web站点管理工具或Login控件提供的控制级别高)的控制。在这些情况下,可以直接使用Membership APIMembership API是通过Membership类公开的。Membership类包含的方法使你能够完成以下工作:创建新用户、更改密码、搜索与特定条件匹配的用户等。其实在幕后,Login 控件使用这些方法与已配置的成员身份提供程序进行交互。也可以自己实现。如下:

//判断用户是否存在[如果使用了login控件,就不必手动编写了。]

if (Membership.ValidateUser(userName, password))

{

    .....判断用户角色或者其他信息,最后跳转

}

 

3.角色管理器概述

 
角色管理不仅限于限制对页面或文件夹的权限。角色管理还提供一个API,可使用该API以编程方式确定用户是否属于某角色。这使您能够编写利用角色的代码,并能够不仅基于用户是谁而且基于用户所属的角色来执行所有应用程序任务。

  [form
验证]如果在应用程序中建立了用户标识,则可以使用角色管理API方法创建角色、向角色中添加用户,并获取有关用户在角色中的分配情况的信息。这些方法使你可以创建自己的用于管理角色的接口。 比如:

......验证通过(通过成员资格Membership类的验证方法验证

if (Roles.RoleExists(UserRole))//判断该用户角色是否已经存在

{

    //登录主页或跳转到刚刚请求的页面

     FormsAuthentication.RedirectFromLoginPage(UserName, false);           

}

else

{

     Roles.CreateRole(UserRole);//该用户还没创建角色,则创建该角色

     Roles.AddUserToRole(UserName, UserRole);//添加该用户到指定的角色

     FormsAuthentication.RedirectFromLoginPage(UserName, false);//登录主页或跳转到刚刚请求的页面

}

 
如果应用程序使用Windows身份验证,则角色管理API为角色管理提供的功能较少。例如,不能使用角色管理创建新角色。不过,可以使用Windows用户和组管理创建用户账户和组,并将用户分配到组。然后,角色管理可以读取Windows用户和组信息,以便你可以使用此信息进行身份验证。

 
若要使用角色管理,首先要启用它,并配置能够利用角色的访问规则(可选)。然后可以在运行时使用角色管理功能处理角色。对于配置角色管理、定义角色、向角色中添加用户和创建访问规则而言,最简单的方法是使用网站管理工具[或者IISasp.net管理]

 
若要使用ASP.NET角色管理,请在应用程序的Web.config文件中使用如下所示的设置启用它。

角色管理器的配置

<roleManager enabled="true" cacheRolesInCookie="true|false" cookieName="name" cookiePath="/" cookieProtection="All|Encryption|Validation|None" cookieRequireSSL="true|false" cookieSlidingExpiration="true|false " cookieTimeout="number of minutes" createPersistentCookie="true|false" defaultProvider=" MySqlRoleManager " domain="cookie domain">   

<providers><!—下面重写provider配置-->
   
<add name="MySqlRoleManager
             
type="System.Web.Security.SqlRoleProvider"
             
connectionStringName="MySqlConnection "
             
applicationName="MyApplication/>
  </providers>
</roleManager>

 

<!--配置角色授权模块-->

<location path="manage"><!—path为站点内的文件夹-->

    <system.web>

      <authorization>

        <allow roles="manager,administrator" />

        <deny users="?" />

      </authorization>

    </system.web>

</location>

<location path="member">

    <system.web>

      <authorization>

        <allow roles="user" />

        <deny users="?" />

      </authorization>

    </system.web>

</location>

 

  RoleManager节点各属性作用见下表。

 

 

 

 

4.安全性相关的控件

 
作为一个完整的用户系统,为用户提供注册、登录和修改密码等操作是不可少的。ASP.NET提供了众多的登录控件,无需编程就可以实现完整而且可靠的登录解决方案。默认情况下,登录控件与ASP.NET成员资格集成,以帮助使网站的用户身份验证过程自动化。默认情况下,ASP.NET登录控件以纯文本形式工作于HTTP协议上。如果你对安全性十分关注,那么可以使用带SSL加密的HTTPS

  · Login控件

  Login
控件显示用于执行用户身份验证的用户界面。Login控件包含用于用户名和密码的文本框和一个复选框,该复选框让用户指示是否需要服务器使用 ASP.NET成员资格存储他们的标识,并且当他们下次访问该站点时自动进行身份验证。Login控件有用于自定义显示、自定义消息的属性和指向其他页的链接,在那些页面中用户可以更改密码或找回忘记的密码。Login控件可用作主页上的独立控件,或者你还可以在专门的登录页上使用它。

 
· CreateUserWizard控件

  CreateUserWizard
控件收集潜在用户提供的信息。默认情况下,CreateUserWizard控件将新用户添加到ASP.NET成员资格系统中。 CreateUserWizard控件收集下列用户信息,用户名、密码、密码确认、电子邮件地址、安全提示问题和安全答案。

· PasswordRecovery控件

  PasswordRecovery
控件允许根据创建账户时所使用的电子邮件地址来找回用户密码。PasswordRecovery 控件会向用户发送包含密码的电子邮件。我们可以配置ASP.NET成员资格,以使用不可逆的加密来存储密码。在这种情况下, PasswordRecovery控件将生成一个新密码,而不是将原始密码发送给用户。我们还可以配置成员资格,以包括一个用户为了找回密码必须回答的安全提示问题。如果这样做,PasswordRecovery 控件将在找回密码前提问该问题并核对答案。

 
· ChangePassword控件

 
通过ChangePassword控件,用户可以更改其密码。用户必须首先提供原始密码,然后创建并确认新密码。如果原始密码正确,则用户密码将更改为新密码。该控件还支持发送关于新密码的电子邮件。ChangePassword控件由通过身份验证和未通过身份验证的用户使用。如果用户未通过身份验证,该控件将提示用户输入登录名。如果用户已通过身份验证,该控件将用户的登录名填入文本框。 

 
· LoginView控件

 
使用LoginView控件,可以向匿名用户和登录用户显示不同的信息。LoginView控件还包括ViewChangingViewChanged的事件,我们可以为这些事件编写当用户登录或更改状态时的处理序。

 
· LoginStatus控件

  LoginStatus
控件为没有通过身份验证的用户显示登录链接,为通过身份验证的用户显示注销链接。登录链接将用户带到登录页。注销链接将当前用户的身份重置为匿名用户。

 
· LoginName控件

 
如果用户已使用ASP.NET成员资格登录,LoginName控件将显示该用户的登录名。或者,如果站点使用集成Windows身份验证,该控件将显示用户的Windows账户名。


 
5.ASP.NET网站管理工具

 
网站管理工具使你能够通过简单的 Web 界面查看并管理网站配置。网站管理工具提供一个选项卡式界面,该界面在每个选项卡中对相关的配置设置进行分组。

 
· 安全选项卡

 
使用“安全”选项卡管理访问规则,以便帮助保证网站中特定资源的安全,并对用户账户和角色进行管理。可以指定如何使用网站——从Internet中使用(公共),或者从Intranet中使用(在局域网上)。这进而可指示网站将使用的身份验证模式的类型。Internet网站使用ASP.NET成员资格系统,即定义单个的用户账户。ASP.NET使用一个安全系统,以限制对一些特定的用户账户或这些用户账户所属的角色的访问。Intranet网站使用 Windows身份验证,即用户由Windows登录信息标识。

 
· 应用程序选项卡

 
使用“应用程序”选项卡管理与网站相关的各种设置,包括如下:
 
应用程序设置。这些设置是需要集中存储并可从网站任何地方以代码形式访问的一些名称/值对。
  SMTP
设置。确定站点如何发送电子邮件。
 
调试和跟踪设置。
 
脱机和联机设置。使网站脱机(将其关闭)以执行维护,或使一个新的Microsoft SQL Server标准版的数据库联机。

 
· 提供程序选项卡

 
使用“提供程序”选项卡,以测试或指定网站的成员资格和角色管理的提供程序。数据库提供的程序是一些经调用以存储特定功能的应用程序数据的类。默认情况下,网站管理工具在网站的 App_Data 文件夹中配置并使用一个本地Microsoft SQL Server标准版数据库。相反,可以选择使用不同的提供程序(如远程SQL Server数据库),以存储成员资格和角色管理。

 

本文为网上搜集资料整合

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值