1、http:/ 2.0与与IIS服务器相结合,在框架的支持下,服务器相结合,在框架的支持下,对传统的方法做了很大的改进,系统提供了强大的工具和若干组合控件。利用这些工具可以采用简易的方法,快速开发出对传统的方法做了很大的改进,系统提供了强大的工具和若干组合控件。利用这些工具可以采用简易的方法,快速开发出功能完备的具有基于角色的安全技术的程序。功能完备的具有基于角色的安全技术的程序。n围绕基于角色的安全技术,本章将讲述以下几方面的内容:围绕基于角色的安全技术,本章将讲述以下几方面的内容:n基于角色的安全技术的特点基于角色的安全技术的特点nASP.NET 2.0基于角色的安全技术的新特点基于角色的安
2、全技术的新特点n基于角色的安全技术的准备工作基于角色的安全技术的准备工作n利用控件创建安全网页利用控件创建安全网页n直接调用直接调用Membership API 方法方法 http:/ 基于角色的安全技术的特点基于角色的安全技术的特点 n18.2 ASP.NET 2.0基于角色的安全技术的特点基于角色的安全技术的特点 n18.3 基于角色的安全技术的准备工作基于角色的安全技术的准备工作 n18.4 利用控件创建安全页利用控件创建安全页 n18.5 直接调用直接调用Membership API方法方法 n18.6 小小 结结 n18.7 习习 题题 http:/ 网站中可以包括多个入口网站中可以
3、包括多个入口 u18.1.2 基于角色的安全技术是有层次的基于角色的安全技术是有层次的 http:/ 2.0中,为了进行用户管理和保证网页安全,系统提供了完善的服务。包括提中,为了进行用户管理和保证网页安全,系统提供了完善的服务。包括提供了一个网站管理工具和供了一个网站管理工具和7个组合控件。当给网站配置好安全设置以后个组合控件。当给网站配置好安全设置以后(见下一个问题见下一个问题)系系统还将在应用程序的统还将在应用程序的“App_Data”专用目录下创建专用数据库专用目录下创建专用数据库(通常取名为通常取名为ASPNETDB.MDF)和若干专用数据表,这些表包括用户的注册信息、角色信息以及为
4、个和若干专用数据表,这些表包括用户的注册信息、角色信息以及为个性服务所需要的信息等。系统不仅自动建立了这些表格,还将自动存入这些信息,在注册性服务所需要的信息等。系统不仅自动建立了这些表格,还将自动存入这些信息,在注册表中进行查询等项工作全面地实现了自动化。在这些工具的支持下,设计者只需做一些简表中进行查询等项工作全面地实现了自动化。在这些工具的支持下,设计者只需做一些简单的设置,就能设计出功能比较完备的应用基于角色的安全技术的网页。单的设置,就能设计出功能比较完备的应用基于角色的安全技术的网页。n在在ASP.NET 2.0中基于角色的安全技术包括以下两方面的工作。中基于角色的安全技术包括以下
5、两方面的工作。n1用户认证方面l创建新用户创建新用户l登录用户登录用户l用户修改密码用户修改密码l恢复用户密码恢复用户密码n显示状态和其他有关信息显示状态和其他有关信息n2权限管理方面l给用户划分角色给用户划分角色l给角色分配资源给角色分配资源http:/ 组织好站点中的文件组织好站点中的文件 u18.3.2 利用网站管理工具进行安全配置利用网站管理工具进行安全配置 http:/ Web.config文件与目录的关系http:/ Rule)三大部分。可以利用下面的三个方框分别进行设置,也可以利用系统提供的三大部分。可以利用下面的三个方框分别进行设置,也可以利用系统提供的“安全设置向导安全设置向
6、导”的智能的智能提示逐项进行设置。下面重点介绍使用安全设置向导来设置的提示逐项进行设置。下面重点介绍使用安全设置向导来设置的 方法。方法。n(1)选择【使用安全设置向导按部就班地配置安全性】,在出现的对话框中单击【下一步】进入第选择【使用安全设置向导按部就班地配置安全性】,在出现的对话框中单击【下一步】进入第二步。二步。n(2)在【选择访问方法】对话框中提供了在【选择访问方法】对话框中提供了internet和和intranet两种选择,这里选择【通过两种选择,这里选择【通过internet】项,再单击【下一步】。项,再单击【下一步】。n(3)在【高级提供程序设置】对话框中提示:若要更改应用程序
7、的数据存储区,请退出【安全向在【高级提供程序设置】对话框中提示:若要更改应用程序的数据存储区,请退出【安全向导】,然后单击【提供程序配置】选项卡。使用【提供程序配置】选项卡可以配置网站管理数据的存导】,然后单击【提供程序配置】选项卡。使用【提供程序配置】选项卡可以配置网站管理数据的存储方式。这里不改变数据存储区,即仍然使用默认提供的储方式。这里不改变数据存储区,即仍然使用默认提供的SQL Server数据库存储数据。因此只要单击数据库存储数据。因此只要单击【下一步】即可。【下一步】即可。n(4)在步骤在步骤4中,系统会询问是否创建基于角色的应用,如果应用中需要用到角色,就必须勾选中,系统会询问
8、是否创建基于角色的应用,如果应用中需要用到角色,就必须勾选【为此网站启用角色】复选框,然后单击【下一步】时,进入如图【为此网站启用角色】复选框,然后单击【下一步】时,进入如图18.4所示的界面。所示的界面。n本界面中表示已经创建了本界面中表示已经创建了2个角色个角色(如果第一次创建,将不含任何角色如果第一次创建,将不含任何角色),如果需要增加新角色时,先在,如果需要增加新角色时,先在【新角色名称】输入框中输入新角色名,然后单击【添加角色】按钮即可。如果需要删除某种角色时,【新角色名称】输入框中输入新角色名,然后单击【添加角色】按钮即可。如果需要删除某种角色时,只要单击该角色名右方的【删除】即可
9、。处理完成以后单击【下一步】。只要单击该角色名右方的【删除】即可。处理完成以后单击【下一步】。n(5)在步骤在步骤5中,要求增添新用户,在这一步中可以输入用户名,密码,中,要求增添新用户,在这一步中可以输入用户名,密码,E-mail等信息。具体做法等信息。具体做法将在下一节中讲述。单击【下一步】。将在下一节中讲述。单击【下一步】。n在步骤在步骤6中,要求确定访问的规则。此时弹出的界面如图中,要求确定访问的规则。此时弹出的界面如图18.5所示。所示。http:/ 增加新角色界面 http:/ 设置访问规则界面 http:/ 给用户分配角色 http:/ 检查或调整权限的分配http:/ n n
10、n nnn nnn在在中配置的顺序非常重要,系统总是按照从前向后逐条匹配的办法,并且执行最先的匹配者。例如前面的顺序颠倒如中配置的顺序非常重要,系统总是按照从前向后逐条匹配的办法,并且执行最先的匹配者。例如前面的顺序颠倒如下:下:nnn n nn n则所有的用户则所有的用户(包括包括roles=admin)都不允许访问该目录下的文件。所以应该注意调整好对某个目录配置的顺序。都不允许访问该目录下的文件。所以应该注意调整好对某个目录配置的顺序。n利用这一特点,我们能够用非常简单的方法来调整用户的访问权限。例如在某些收费项目中,对于没有交费或者交费到期的用户,只要将该用户的保护字段放利用这一特点,我
11、们能够用非常简单的方法来调整用户的访问权限。例如在某些收费项目中,对于没有交费或者交费到期的用户,只要将该用户的保护字段放在在“”之后,一旦交了费用时再将它的保护字段放到之后,一旦交了费用时再将它的保护字段放到“”的前面即可,不需要编写任何代码。的前面即可,不需要编写任何代码。n代码中代码中“*”代表所有用户;代表所有用户;“?”代表匿名用户。代表匿名用户。n(2)应用程序的根目录下出现了一个专用的应用程序的根目录下出现了一个专用的App_Data目录,在该目录下出现了一个专用的目录,在该目录下出现了一个专用的SQL Server数据库数据库(名为名为ASPNETDB.MDF)。数据库中包括。
12、数据库中包括用于用户管理的若干专用数据表,这些数据表将自动记录登录用户、角色以及它们的相关数据。用于用户管理的若干专用数据表,这些数据表将自动记录登录用户、角色以及它们的相关数据。http:/ 用户登录控件用户登录控件 u18.4.2 使用创建新用户控件使用创建新用户控件 u18.4.3 登录状态与登录姓名控件登录状态与登录姓名控件 u18.4.4 登录视图控件登录视图控件 u18.4.5 PasswordRecovery 控件和控件和ChangePassword控件控件 http:/ 2.0系统提供了一组用户管理控件,这些控件中大多数都不是单一的标准控件,系统提供了一组用户管理控件,这些控件
13、中大多数都不是单一的标准控件,而是多个控件的组合。利用这些控件可以非常方便地完成用户管理和基于角色的安全策略而是多个控件的组合。利用这些控件可以非常方便地完成用户管理和基于角色的安全策略的设计工作。这些控件包括:的设计工作。这些控件包括:lLogin用户登录控件用户登录控件lCreateUserWizard创建新用户控件创建新用户控件lLoginView登录视图控件登录视图控件lLoginName登录用户名控件登录用户名控件lLoginStatus登录状态控件登录状态控件lChangePassword改变密码控件改变密码控件lPasswordRecovery恢复密码控件恢复密码控件n这些控件不
14、仅定义了初步外观这些控件不仅定义了初步外观(可以进一步修改可以进一步修改),还定义了标准行为。例如,有的控件可,还定义了标准行为。例如,有的控件可以用来创建用户的注册、登录和密码恢复界面的外形并实现其功能。也有一些控件主要用以用来创建用户的注册、登录和密码恢复界面的外形并实现其功能。也有一些控件主要用来向用户显示不同的信息。例如,利用来向用户显示不同的信息。例如,利用 LoginView 控件可以定义不同的模板,将其显示控件可以定义不同的模板,将其显示给不同角色的成员等。给不同角色的成员等。http:/ 工作。工作。http:/ 登录控件界面 http:/ 为登录控件设置属性 http:/ 属
15、性的属性的BodyFileName,比如,文件名为,比如,文件名为welcomeEmail.txt。该文件中还可以包含一些特殊的符号。该文件中还可以包含一些特殊的符号如如和和用来代替实际的用户名和用户密码,例如:用来代替实际的用户名和用户密码,例如:n欢迎您登录本网站欢迎您登录本网站n您的名字是:您的名字是:n您的密码是:您的密码是:n下面是在下面是在CreateUserWizard控件中,为用户完成注册后发送给用户的一封主题为控件中,为用户完成注册后发送给用户的一封主题为“感谢感谢”的电子邮件而做的设置,邮的电子邮件而做的设置,邮件的文件名为件的文件名为“welcomeEmail.txt”。
16、nn n BodyFileName=welcomeEmail.txt n From=mySn Subject=感谢感谢!n nn如果要使该控件具有发送电子邮件的功能,必须使它能够发送邮件,为此在如果要使该控件具有发送电子邮件的功能,必须使它能够发送邮件,为此在MACHINE.CONFIG文件中将看到下面的配文件中将看到下面的配置:置:nhttp:/ Provider中的设置。例如,中的设置。例如,Question和和Answer输入框只有当输入框只有当Membership Provider中的中的requiresQuestionAndAnswer属性设置为属性设置为true时时(默认时即如此默
17、认时即如此)才会显示出来。才会显示出来。n当这些设置完成后打开当这些设置完成后打开ACCESS数据库中的用户表数据库中的用户表,可以看到刚刚建立的用户信息已经存可以看到刚刚建立的用户信息已经存储在数据表中了,在这里并没有编写一行代码。这些复杂的功能实际上都被封装到了储在数据表中了,在这里并没有编写一行代码。这些复杂的功能实际上都被封装到了CreateUser控件之中。控件之中。http:/ 东西。东西。n这两个控件产生的对应代码分别如下:这两个控件产生的对应代码分别如下:nnn在在LoginStatus控件中为了能够正确退出,还可以将下面两个属性进行设置。控件中为了能够正确退出,还可以将下面两
18、个属性进行设置。nLogoutAction属性:设成属性:设成Redirect(默认是默认是Refresh)。nLogoutPageUrl属性:指定退出的网页,通常是用于登录的网页。属性:指定退出的网页,通常是用于登录的网页。http:/ 2.0提供了一个十分有用的控件就是提供了一个十分有用的控件就是LoginView。LoginView结合导航控件能够根据当前用户的角色结合导航控件能够根据当前用户的角色自动显示不同的导航界面,实现基于角色的网站浏览功能。默认情况下该控件只包括两个模板:匿名自动显示不同的导航界面,实现基于角色的网站浏览功能。默认情况下该控件只包括两个模板:匿名(未登录未登录)
19、模板模板(Anonymous)与已登录模板与已登录模板(LoggedIn),可以对匿名用户和已登录的用户分别显示不,可以对匿名用户和已登录的用户分别显示不同的导航界面。如果在应用项目中设置了多个不同的角色时,控件将自动增加多种不同的模板,用来同的导航界面。如果在应用项目中设置了多个不同的角色时,控件将自动增加多种不同的模板,用来为不同角色显示不同的导航界面。每个登录后的用户将只能按照自己所充当的角色查看自己权限以内为不同角色显示不同的导航界面。每个登录后的用户将只能按照自己所充当的角色查看自己权限以内可以访问的网页,从而可以直观地保护网页。然而这只是视图上的保护,并不能代替可以访问的网页,从而
20、可以直观地保护网页。然而这只是视图上的保护,并不能代替Web.config文件文件的作用,一些用户还有可能直接利用的作用,一些用户还有可能直接利用URL直接进入受保护的网页。因此视图的保护还应该和直接进入受保护的网页。因此视图的保护还应该和Web.config相结合才能既有效又方便地保护网页。相结合才能既有效又方便地保护网页。n下面用一个简单的示例来说明下面用一个简单的示例来说明LoginView控件的使用方法。控件的使用方法。n(1)将将LoginView控件拖入窗体,单击【编辑控件拖入窗体,单击【编辑RoleGroups】,打开角色组编辑窗口,并将已经设】,打开角色组编辑窗口,并将已经设置
21、的角色增加到窗口中,情况如图置的角色增加到窗口中,情况如图18.11所示。所示。n(2)再查看再查看LoginView控件的模板时,将看见除原来的两个模板以外又增加了几个角色的模板。情控件的模板时,将看见除原来的两个模板以外又增加了几个角色的模板。情况如图况如图18.12所示。所示。n选择不同的模板,放入选择不同的模板,放入TreeView控件,分别按照角色的权限显示相应的网页。控件,分别按照角色的权限显示相应的网页。n(1)匿名用户的模板匿名用户的模板(AnonymousTemplate)如图如图18.13所示。所示。n(2)角色为角色为Admin的模板的模板(RoleGroup0-Admi
22、n)如图如图18.14所示。所示。n(3)角色为角色为Sales的模板的模板(RoleGroup2-Sales)如图如图18.15所示。所示。http:/ 角色组编辑窗口 http:/ 2.0提供了一个很有吸引力的控件,即提供了一个很有吸引力的控件,即PasswordRecovery 控件。该控件能够通过电子邮件来帮助恢复忘记的密码。控件。该控件能够通过电子邮件来帮助恢复忘记的密码。n要使用该控件,需要具有自动发送邮件的功能,必须像要使用该控件,需要具有自动发送邮件的功能,必须像CreateUserWizard控件一样,正确配置控件一样,正确配置Web.config文件。文件。n只要用户在注册
23、时正确地填写了邮箱地址和配置正确,并在该控件里提交了请求,它就会自动把密码发送到你的邮箱中。只要用户在注册时正确地填写了邮箱地址和配置正确,并在该控件里提交了请求,它就会自动把密码发送到你的邮箱中。就像就像CreateUserWizard控件一样,也可以用控件一样,也可以用 MailDefinition 属性来定义发送给用户的电子邮件的属性,属性来定义发送给用户的电子邮件的属性,n此控件提供了三种模板。此控件提供了三种模板。nUserName:用于初始化控件,用户需要在这里填上登录名。:用于初始化控件,用户需要在这里填上登录名。nQuestion:在用户寻找遗忘的密码时必须回答的问题。:在用户
24、寻找遗忘的密码时必须回答的问题。nAnswer:用在当用户输入的密码正确,或者已经用:用在当用户输入的密码正确,或者已经用E-mail发给用户的时候。发给用户的时候。n在在PasswordRecovery控件中还有一些重要的事件。控件中还有一些重要的事件。nBeforeUserLookup:当用户查找用户资料的时候被激发。可以设定个人测试条件取消这个过程。:当用户查找用户资料的时候被激发。可以设定个人测试条件取消这个过程。nUserLookupError:当用户名不存在时激发。:当用户名不存在时激发。nBeforeAnswerLookup:在用户输入了答案并且被验证后激发。:在用户输入了答案并
25、且被验证后激发。nAnswerLookupError:当输入答案错误时被激发。:当输入答案错误时被激发。nBeforeSendMail:在邮件发送之前被激发。:在邮件发送之前被激发。nChangepassword控件的用法和控件的用法和PasswordRecovery的相似,它也有的相似,它也有MailDefinition 属性,通过设置该属性可以设属性,通过设置该属性可以设置发送给用户的邮件格式。置发送给用户的邮件格式。n修改密码修改密码(Changepassword)控件的界面,如图控件的界面,如图18.16所示。所示。n恢复密码恢复密码(PasswordRecovery)控件的界面,如图
26、控件的界面,如图18.17所示。所示。http:/ Membership API方法。在方法。在System.Web.Security命名空间中主要包括两个类:命名空间中主要包括两个类:Roles类和类和RolePrincipal类。类。nMembership API 是是Membership 类中公有的方法,利用这些方法能够完成以下工作:类中公有的方法,利用这些方法能够完成以下工作:创建新用户;更改密码;搜索与特定条件匹配的用户;创建角色创建新用户;更改密码;搜索与特定条件匹配的用户;创建角色(CreateRole);删除角;删除角色色(DeleteRole);读取所有角色;读取所有角色(G
27、etAllRoles);读取某个用户分配的角色;读取某个用户分配的角色(GetUsersInRole)和读取某个角色的用户和读取某个角色的用户(GetRolesForUser)等。实际上,前面所说的等。实际上,前面所说的用户管理控件就是使用这些方法来实现用户管理的。用户管理控件就是使用这些方法来实现用户管理的。n下面举例说明下面举例说明 Membership 类的一些比较常用的方法。类的一些比较常用的方法。n1创建新用户n先在窗体中创建先在窗体中创建6个输入窗口以及一个按钮,其中:个输入窗口以及一个按钮,其中:lTextBox1用于输入新用户名;用于输入新用户名;lTextBox2用于输入新用
28、户密码;用于输入新用户密码;lTextBox3用于输入新用户的用于输入新用户的E-mail;lTextBox4用于输入安全提示问题;用于输入安全提示问题;lTextBox5用于输入回答问题;用于输入回答问题;lTextBox6用于输入提示错误。用于输入提示错误。http:/ Button1_Click(object sender,EventArgs e)n n if(this.IsValid)n n MembershipCreateStatus status;n MembershipUser user=nMembership.CreateUser(this.TextBox1.Text,this
29、.TextBox2.Text,this.nTextBox3.Text,this.TextBox4.Text,this.TextBox5.Text,false,out status);n switch(status)n n case MembershipCreateStatus.Success:n FormsAuthentication.RedirectFromLoginPage(user.UserName,false);n break;n case MembershipCreateStatus.DuplicateEmail:n this.TextBox6.Text=email 地址已经登录地址
30、已经登录;n break;n case MembershipCreateStatus.DuplicateUserName:n this.TextBox6.Text=用户已经登录用户已经登录;n break;n case MembershipCreateStatus.InvalidEmail:n this.TextBox6.Text=email 地址格式不对地址格式不对;n break;n case MembershipCreateStatus.InvalidPassword:n this.TextBox6.Text=密码不对密码不对;n break;n case MembershipCreat
31、eStatus.UserRejected:n this.TextBox6.Text=登录失败登录失败,原因不清楚原因不清楚;n break;n n n http:/ Button1_Click(object sender,EventArgs e)nn if(this.TextBox1.Text.Length 0)n n Roles.CreateRole(this.TextBox1.Text);n n n3删除角色nvoid Button1_Click(object sender,EventArgs e)nnRoles.DeleteRole(this.DropDownList2.Selected
32、Item.Text);nn4给用户分配角色 nvoid Button1_Click(object sender,EventArgs e)n n Roles.AddUserToRole(this.DropDownList1.SelectedItem.Text,this.DropDownList2.SelectedItem.Text);n n5从角色中删除用户nvoid Button1_Click(object sender,EventArgs e)n n Roles.RemoveUserFromRole(this.DropDownList1.SelectedItem.Text,this.Drop
33、DownList2.SelectedItem.Text);n http:/ API方法写入。方法写入。n系统提供的系统提供的7个控件一旦生成,就具备基本的显示界面和比较完善的功个控件一旦生成,就具备基本的显示界面和比较完善的功能。设计者只需根据情况进行设置和修改,以符合应用程序的实际需要。能。设计者只需根据情况进行设置和修改,以符合应用程序的实际需要。http:/ 填空题填空题u2 选择题选择题u3 判断题判断题u4 简答题简答题u5 操作题操作题http:/ ,以便可以随时退出登,以便可以随时退出登录状态。录状态。n(2)LoginName控件用来自动显示登录的控件用来自动显示登录的 。n(
34、3)当利用当利用CreateUserWizard控件创建新用户时,密码不能随便设置,控件创建新用户时,密码不能随便设置,必须符合以下必须符合以下3项条件:项条件:;。n(4)帮助用户恢复密码可以利用帮助用户恢复密码可以利用 控件进行设计。控件进行设计。n(5)帮助用户修改密码可以利用帮助用户修改密码可以利用 控件进行设计。控件进行设计。http:/ 。nA.便于管理便于管理 B.调用方便调用方便 nC.集中网页的入口集中网页的入口 D.便于网站迁移便于网站迁移n(2)在一个子目录的在一个子目录的web.config 文件中有如下一段代码:文件中有如下一段代码:nn n n n nn允许访问此子
35、目录下的网页的角色有允许访问此子目录下的网页的角色有 。nA.admin B.manager nC.admin和和manager D.admin、manager 和和salesn(3)用户登录控件用户登录控件(Login)中的中的DestinationPageUrl属性代表属性代表 。nA.登录成功的提示登录成功的提示 B.登录成功时转向的网页登录成功时转向的网页nC.登录失败时转向的网页登录失败时转向的网页 D.登录失败时的提示登录失败时的提示http:/ 2.0对基于角色的安全技术的支持。对基于角色的安全技术的支持。n(2)简述利用简述利用ASP.NET网站管理工具定义角色、创建用户和指定访问规则网站管理工具定义角色、创建用户和指定访问规则的步骤。的步骤。http:/ API来创建新用户。来创建新用户。http:/