《ASP.NET程序设计教程 C#版 教学课件 ppt 作者 崔淼 第12章 ASP.NET的安全管理》由会员分享,可在线阅读,更多相关《ASP.NET程序设计教程 C#版 教学课件 ppt 作者 崔淼 第12章 ASP.NET的安全管理(17页珍藏版)》请在金锄头文库上搜索。
1、第12章 ASP.NET的安全管理,本章讲述的主要内容 12.1 用户身份认证 12.2 使用网站管理工具进行安全设置 12.3 使用登录控件 12.4 使用Membership API,12.1 用户身份认证,12.1.1 传统的认证方法 所谓传统的ASP.NET用户身份认证是指,使用Session对象保存用户登录成功与否和用户“角色”等信息。当用户访问除了登录页面之外的其他页面时,程序首先检测Session对象中保存的数据,从而判断用户是否已通过了身份验证,若用户用户属于直接调用本页面URL并未通过身份认证则跳转回登录页面,否则继续执行后续代码(即本网页功能实现代码)。用户登录成功后,AS
2、P.NET应用程序会从Session中读取用户的“角色”信息,根据“角色”不同返回不同的页面或同一页面中不同的内容。,12.1 用户身份认证,12.1.2 基于角色的安全管理简介 基于角色的安全管理技术主要包括以下两个方面的内容: 1) 用户身份认证:主要包括:新用户注册、用户登录、修改密码、遗忘密码处理、显示状态和其他有关信息等。这些操作基本上都可以通过工具箱“登录”选项卡中的7个控件来完成。 2) 用户权限管理:主要包括:为用户分配角色和为角色分配可访问资源等。 使用基于角色的安全管理技术需要开发人员创建ASP.NET网站时,根据资源的级别不同使用树形目录的方式进行组织。,12.2 使用网
3、站管理工具进行安全设置,12.2.1 连接SQL Server数据库 在使用ASP.NET网站管理工具前,首先需要建立与Microsoft SQL Server数据库的连接,并创建用于存放用户信息、角色信息、安全规则等信息的数据表。 如果使用外部SQL Server数据库,则需要运行A SQL Server注册工具(aspnet_regsql.exe),并通过向导完成相应的操作。该工具作为一个单独的工具程序,默认存放在C:WINDOWSMicrosoft.NETFrameworkv2.0.50727中。 执行Windows“开始”菜单中的“运行”命令,输入“cmd”后单击“确定”按钮,进入命令
4、提示符窗口键入“cd frameworkv2.0.50727”后按Enter键,将当前目录切换到A SQL Server注册工具所在的位置。 键入“aspnet_regsql”后按Enter键,启动ASP.NET SQL Server安装向导,。,12.2 使用网站管理工具进行安全设置,12.2.2 使用ASP.NET网站管理工具 1. 规划网站文件夹 2. 创建和管理用户 3. 创建和管理角色 4. 创建和管理网站访问规则,12.3 使用登录控件,12.3.1 Login控件,12.3 使用登录控件,12.3.2 CreateUserWizard控件 创建新用户控件(CreateUserWi
5、zard)用于向数据库中添加新用户的相关记录。使用该控件需要新建一个Web窗体,并将控件从工具箱中添加到页面中。需要设置Login控件的CreateUserText和CreateUserUrl属性值,以显示用于跳转到添加新用户页面的链接文本和目标URL。,12.3 使用登录控件,12.3.3 LoginName和LoginStatus控件 1. LoginName控件 LoginName控件用于显示登录用户的用户名信息,通过该控件的FormatString属性可以设置输出信息的内容和格式。FormatString属性的默认值为“0”表示登录用户的用户名,在属性窗口或代码中可使用HTML标记重新
6、设置。 2. LoginStatus控件 LoginStatus控件能根据当前用户的验证状态显示为一个登录(Login)或注销(Logout)链接按钮。当用户单击“登录”链接后,默认的会跳转到页面Login.aspx中。而单击“注销”链接,将会从该网站中注销当前用户的登录。,12.3 使用登录控件,12.3.4 LoginView控件 ASP.NET网站中通常需要根据用户角色不同返回不同的页面。在早期版本中实现这一功能需要程序员手工编写相应的代码。自ASP.NET 2.0之后出现的LoginView(登录视图)控件可使程序员几乎不必编写任何代码即可实现上述功能。,12.3 使用登录控件,12.
7、3.5 ChangePassword和PasswordRecovery控件 1. ChangePassword控件 ChangePassword控件有2中不同的用法,一种是在用户登录后通过登录时使用的用户名进行密码修改,在这种方式下控件中不显示用户名栏,控件界面如图12-25所示。再一种是无论登录与否,用户可以在控件中输入用户名、密码、新密码、确认新密码后进行密码修改,控件界面如图12-26所示。是否显示用户名栏由控件的DisplayUserName属性决定,默认值为false即不显示用户名栏。,12.3 使用登录控件,12.3.5 ChangePassword和PasswordRecover
8、y控件 2. PasswordRecovery控件 PasswordRecovery控件可根据用户注册时提供的“安全问题”、“安全问题答案”来确定遗忘密码的用户的合法身份,正确回答了安全问题后能自动修改用户密码为一个随机字符串,并使用指定的SMTP服务器向用户电子邮箱发送新密码。 从PasswordRecovery控件的工作机制可以看出,要找回恢复遗忘了密码的帐户,前提条件有以下2个: 1) 用户注册时填写的电子邮箱必须是有效的。 2) ASP.NET网站必须有权使用某个SMTP服务器,将由程序自动生成的电子邮件正确地发送到用户邮箱。,12.4 使用Membership API,12.4.1
9、用户管理 1. 创建用户 使用Membership.CreatUser()方法可以非常方便地完成新用户创建工作。该方法的语法格式如下所示: Membership.CreateUser(Username, Password, Email, Question, Answer, IsApproved, Status) 语句执行后返回一个用于新创建用户的MembershipUser对象,如果创建用户不成功则返回一个null。,12.4 使用Membership API,12.4.1 用户管理 2. 查找和删除用户 一般情况下,在删除用户前首先需要使用Membership类提供的GetUser()、Fi
10、ndUserByName()或FindUserByEmail()方法,从数据库中找到希望删除的用户,而后再调用DeleteUser()方法进行删除。 3. 修改用户数据 使用MembershipUser类提供的方法可以对指定用户进行密码、电子邮件、安全问题及安全问题答案等数据的修改。 (1) 修改密码 ChangePassword(OldPassword, NewPassword);,12.4 使用Membership API,12.4.1 用户管理 3. 修改用户数据 (2) 修改安全问题和安全问题答案 MembershipUser类提供的ChangePasswordQuestionAndA
11、nswer()用于修改安全问题及答案,其语法格式为: ChangePasswordQuestionAndAnswer(Password, NewQuestion, NewAnswer); (3) 修改电子邮件地址 通过查找用户的方法得到MembershipUser类型的返回值,为返回值的Email属性赋以新值(新的邮箱地址),而后调用Membership.UpdateUser()方法将修改后的数据写入数据库即可完成修改用户邮箱地址的操作。,12.4 使用Membership API,12.4.2 角色管理 1. 创建新角色 创建一个新角色可以使用Roles类的CreateRole()方法来实现
12、。其语法格式如下所示: Roles.CreateRole(RoleName); 2. 删除角色 删除数据库中现有角色可以使用Roles类的DeleteRole()方法来实现,其语法格式如下:Roles.DeleteRole(RoleName); 3. 为用户分配角色 为数据库中现有用户分配角色可以使用Roles类的AddUserToRole()方法来实现,其语法格式如下所示: Roles.AddUsersToRole(UserArray, RoleName);,12.4 使用Membership API,12.4.2 角色管理 4. 从角色中删除用户 从现有角色中删除用户可以使用Roles类的
13、RemoveUserFromRole()方法来实现。其语法格式如下所示: Roles.RemoveUserFromRole(Username, RoleName); 其中,Username参数表示用户名,RoleName参数表示角色名。例如,下列语句能将用户“lisi”从“admin”角色中删除。 Roles.RemoveUserFromRole(“lisi“, “admin“); 需要说明的是,从角色中删除用户并不会从数据库中删除用户记录,仅是取消了用户的角色身份。,12.4 使用Membership API,12.4.2 角色管理 5. 查询角色 (1) 查询数据库中所有角色 (2) 查询用户具有的角色 (3) 查询具有某角色的所有用户,