成员资格和角色管理
目标
成员资格管理
成员角色管理
成员资格管理
在Web应用程序中有关成员验证、管理等内容基本没有太大区别。可以考虑将这些相对固定的内容抽象并形成独立的模型以方便我们的开发。ASP.NET解决了这个方案,提供了成员资格管理器功能。核心的利用内置的成员库表(SQL Server)、成员资格管理API(Membership、MembershipUser等)、成员资格提供程序(SqlMembershipProvider等),实现模块化和自动化的成员资格管理模式。
成员资格简介
ASP.NET成员资格支持下列功能:
(1)创建新用户和密码。
(2)将成员资格信息(用户名、密码和支持数据)存储在Microsoft SQL Server、Active Directory或其他数据存储区。
(3)对访问站点的用户进行身份验证。可以以编辑方式验证用户,也可以使用ASP.NET登录控件创建一个只需要很少代码或无代码的完整身份验证系统。
(4)管理密码,包括创建、更改和重置密码。根据用户选择的成员资格选项不同,成员资格系统还可以提供一个使用用户提供的问题和答案的自动密码重置系统。
(5)公开经过身份验证的用户的唯一标识,用户可以在自己的应用程序中使用该标识,也可以将该标志与ASP.NET个性化设置和角色管理(授权)系统集成。
(6)指定自定义成员资格提供程序,使用户可以改为自己的代码管理成员资格及自定义数据存储区中维护成员资格数据。
Membership类
Membership类用于验证用户凭据并管理用户设置。Membership类可以独自使用,或者与FormsAuthentication类一起使用,以便创建一个完整的站点用户身份验证系统。
Membership类具有以下几个主要功能:
(1)创建和管理用户
(2)将成员资格信息存储在SQL Server或其他数据存储区中。
(3)对访问站点的用户进行身份验证。可以使用编辑方式对用户进行身份验证,也可以使用登录控件创建一个只需很少代码或无需代码的完整身份验证系统。
(4)管理密码,包括创建、更改、检索和重置密码等。可以选择配置成员资格管理功能,以要求一个密码提示问题及其答案来对忘记密码的用户的密码进行重置。
Membership类的默认提供程序将用户信息以预定格式储存到一个SQL Server数据库ASPNETDB中,如果需要使用一个定制的数据库,则可以创建自己提供的程序。
Membership类的属性
Membership类的方法
建立成员资格支持
要创建一个基于成员资格API的身份验证层,首先选择成员资格提供程序和建立数据存储。
(1)点击“开始”选择“程序”,选择“Microsoft Visual Studio 2010”选择“Visual Studio Tools”最后点击“Visual Studio 命令提示(2010)”,弹出“Visual Studio 命令提示(2010)”对话框,在对话框中输入“aspnet_regsql”点击回车。
(2)弹出“ASP.NET SQL Server安装向导”,点击“下一步”,弹出“选择安装选项”,选择“为应用程序服务配置SQL Server(0)”,点击“下一步”。
(3)弹出“选择服务器和数据库”,服务器填写“.”,数据库选择“默认”,点击“下一步”,弹出“请确定您的设置”,点击“下一步”。
(5)打开“SQL Server Management Studio”软件,点击“数据库”右键选择“刷新”。
(6)打开“Microsoft Visual Studio 2010”,点击“新建”选择“项目”,弹出“新建项目”模版,在模版中选择“Web”——“ASP.NET Web应用程序”,点击“确定”
(7)在“WebApplocation”右键点击“添加”——“新建项”,弹出“添加新项”模版,选择“Web”——“Web窗体”,更改“名称”点击“添加”。
(8)之后就是添加一系列代码:(以下以图片显示)点击“开始”选择“程序”,找到“Microsoft Visual Studio 2010”选择“Microsoft Visual Studio 2010 文档”,弹出“Microsoft Help查看器”。
之后在添加的新页面中复制图中紫色的代码点击进入找到的代码形式为:
- <form id="form1" runat="server">
- <h3>
- Create New User</h3>
- <asp:Label ID="Msg" ForeColor="maroon" runat="server" /><br />
- <table cellpadding="3" border="0">
- <tr>
- <td>
- Username:
- </td>
- <td>
- <asp:TextBox ID="UsernameTextbox" runat="server" />
- </td>
- <td>
- <asp:RequiredFieldValidator ID="UsernameRequiredValidator" runat="server" ControlToValidate="UserNameTextbox"
- ForeColor="red" Display="Static" ErrorMessage="Required" />
- </td>
- </tr>
- <tr>
- <td>
- Password:
- </td>
- <td>
- <asp:TextBox ID="PasswordTextbox" runat="server" TextMode="Password" />
- </td>
- <td>
- <asp:RequiredFieldValidator ID="PasswordRequiredValidator" runat="server" ControlToValidate="PasswordTextbox"
- ForeColor="red" Display="Static" ErrorMessage="Required" />
- </td>
- </tr>
- <tr>
- <td>
- Confirm Password:
- </td>
- <td>
- <asp:TextBox ID="PasswordConfirmTextbox" runat="server" TextMode="Password" />
- </td>
- <td>
- <asp:RequiredFieldValidator ID="PasswordConfirmRequiredValidator" runat="server"
- ControlToValidate="PasswordConfirmTextbox" ForeColor="red" Display="Static" ErrorMessage="Required" />
- <asp:CompareValidator ID="PasswordConfirmCompareValidator" runat="server" ControlToValidate="PasswordConfirmTextbox"
- ForeColor="red" Display="Static" ControlToCompare="PasswordTextBox" ErrorMessage="Confirm password must match password." />
- </td>
- </tr>
- <tr>
- <td>
- Email Address:
- </td>
- <td>
- <asp:TextBox ID="EmailTextbox" runat="server" />
- </td>
- <td>
- <asp:RequiredFieldValidator ID="EmailRequiredValidator" runat="server" ControlToValidate="EmailTextbox"
- ForeColor="red" Display="Static" ErrorMessage="Required" />
- </td>
- </tr>
- <% if (Membership.RequiresQuestionAndAnswer)
- { %>
- <tr>
- <td>
- Password Question:
- </td>
- <td>
- <asp:TextBox ID="PasswordQuestionTextbox" runat="server" />
- </td>
- <td>
- <asp:RequiredFieldValidator ID="PasswordQuestionRequiredValidator" runat="server"
- ControlToValidate="PasswordQuestionTextbox" ForeColor="red" Display="Static"
- ErrorMessage="Required" />
- </td>
- </tr>
- <tr>
- <td>
- Password Answer:
- </td>
- <td>
- <asp:TextBox ID="PasswordAnswerTextbox" runat="server" />
- </td>
- <td>
- <asp:RequiredFieldValidator ID="PasswordAnswerRequiredValidator" runat="server" ControlToValidate="PasswordAnswerTextbox"
- ForeColor="red" Display="Static" ErrorMessage="Required" />
- </td>
- </tr>
- <% } %>
- <tr>
- <td>
- </td>
- <td>
- <asp:Button ID="CreateUserButton" Text="Create User" OnClick="CreateUser_OnClick"
- runat="server" />
- </td>
- </tr>
- </table>
- </form>
<form id="form1" runat="server">
<h3>
Create New User</h3>
<asp:Label ID="Msg" ForeColor="maroon" runat="server" /><br />
<table cellpadding="3" border="0">
<tr>
<td>
Username:
</td>
<td>
<asp:TextBox ID="UsernameTextbox" runat="server" />
</td>
<td>
<asp:RequiredFieldValidator ID="UsernameRequiredValidator" runat="server" ControlToValidate="UserNameTextbox"
ForeColor="red" Display="Static" ErrorMessage="Required" />
</td>
</tr>
<tr>
<td>
Password:
</td>
<td>
<asp:TextBox ID="PasswordTextbox" runat="server" TextMode="Password" />
</td>
<td>
<asp:RequiredFieldValidator ID="PasswordRequiredValidator" runat="server" ControlToValidate="PasswordTextbox"
ForeColor="red" Display="Static" ErrorMessage="Required" />
</td>
</tr>
<tr>
<td>
Confirm Password:
</td>
<td>
<asp:TextBox ID="PasswordConfirmTextbox" runat="server" TextMode="Password" />
</td>
<td>
<asp:RequiredFieldValidator ID="PasswordConfirmRequiredValidator" runat="server"
ControlToValidate="PasswordConfirmTextbox" ForeColor="red" Display="Static" ErrorMessage="Required" />
<asp:CompareValidator ID="PasswordConfirmCompareValidator" runat="server" ControlToValidate="PasswordConfirmTextbox"
ForeColor="red" Display="Static" ControlToCompare="PasswordTextBox" ErrorMessage="Confirm password must match password." />
</td>
</tr>
<tr>
<td>
Email Address:
</td>
<td>
<asp:TextBox ID="EmailTextbox" runat="server" />
</td>
<td>
<asp:RequiredFieldValidator ID="EmailRequiredValidator" runat="server" ControlToValidate="EmailTextbox"
ForeColor="red" Display="Static" ErrorMessage="Required" />
</td>
</tr>
<% if (Membership.RequiresQuestionAndAnswer)
{ %>
<tr>
<td>
Password Question:
</td>
<td>
<asp:TextBox ID="PasswordQuestionTextbox" runat="server" />
</td>
<td>
<asp:RequiredFieldValidator ID="PasswordQuestionRequiredValidator" runat="server"
ControlToValidate="PasswordQuestionTextbox" ForeColor="red" Display="Static"
ErrorMessage="Required" />
</td>
</tr>
<tr>
<td>
Password Answer:
</td>
<td>
<asp:TextBox ID="PasswordAnswerTextbox" runat="server" />
</td>
<td>
<asp:RequiredFieldValidator ID="PasswordAnswerRequiredValidator" runat="server" ControlToValidate="PasswordAnswerTextbox"
ForeColor="red" Display="Static" ErrorMessage="Required" />
</td>
</tr>
<% } %>
<tr>
<td>
</td>
<td>
<asp:Button ID="CreateUserButton" Text="Create User" OnClick="CreateUser_OnClick"
runat="server" />
</td>
</tr>
</table>
</form>

双击“Create User”进入:
- public void CreateUser_OnClick(object sender, EventArgs args)
- {
- // Create new user and retrieve create status result.
- MembershipCreateStatus status;
- string passwordQuestion = "";
- string passwordAnswer = "";
- if (Membership.RequiresQuestionAndAnswer)
- {
- passwordQuestion = PasswordQuestionTextbox.Text;
- passwordAnswer = PasswordAnswerTextbox.Text;
- }
- try
- {
- MembershipUser newUser = Membership.CreateUser(UsernameTextbox.Text, PasswordTextbox.Text,
- EmailTextbox.Text, passwordQuestion,
- passwordAnswer, true, out status);
- if (newUser == null)
- {
- Msg.Text = GetErrorMessage(status);
- }
- else
- {
- Response.Redirect("Default.aspx");
- }
- }
- catch
- {
- Msg.Text = "An exception occurred creating the user.";
- }
- }
- public string GetErrorMessage(MembershipCreateStatus status)
- {
- switch (status)
- {
- case MembershipCreateStatus.DuplicateUserName:
- return "Username already exists. Please enter a different user name.";
- case MembershipCreateStatus.DuplicateEmail:
- return "A username for that e-mail address already exists. Please enter a different e-mail address.";
- case MembershipCreateStatus.InvalidPassword:
- return "The password provided is invalid. Please enter a valid password value.";
- case MembershipCreateStatus.InvalidEmail:
- return "The e-mail address provided is invalid. Please check the value and try again.";
- case MembershipCreateStatus.InvalidAnswer:
- return "The password retrieval answer provided is invalid. Please check the value and try again.";
- case MembershipCreateStatus.InvalidQuestion:
- return "The password retrieval question provided is invalid. Please check the value and try again.";
- case MembershipCreateStatus.InvalidUserName:
- return "The user name provided is invalid. Please check the value and try again.";
- case MembershipCreateStatus.ProviderError:
- return "The authentication provider returned an error. Please verify your entry and try again. If the problem persists, please contact your system administrator.";
- case MembershipCreateStatus.UserRejected:
- return "The user creation request has been canceled. Please verify your entry and try again. If the problem persists, please contact your system administrator.";
- default:
- return "An unknown error occurred. Please verify your entry and try again. If the problem persists, please contact your system administrator.";
- }
public void CreateUser_OnClick(object sender, EventArgs args)
{
// Create new user and retrieve create status result.
MembershipCreateStatus status;
string passwordQuestion = "";
string passwordAnswer = "";
if (Membership.RequiresQuestionAndAnswer)
{
passwordQuestion = PasswordQuestionTextbox.Text;
passwordAnswer = PasswordAnswerTextbox.Text;
}
try
{
MembershipUser newUser = Membership.CreateUser(UsernameTextbox.Text, PasswordTextbox.Text,
EmailTextbox.Text, passwordQuestion,
passwordAnswer, true, out status);
if (newUser == null)
{
Msg.Text = GetErrorMessage(status);
}
else
{
Response.Redirect("Default.aspx");
}
}
catch
{
Msg.Text = "An exception occurred creating the user.";
}
}
public string GetErrorMessage(MembershipCreateStatus status)
{
switch (status)
{
case MembershipCreateStatus.DuplicateUserName:
return "Username already exists. Please enter a different user name.";
case MembershipCreateStatus.DuplicateEmail:
return "A username for that e-mail address already exists. Please enter a different e-mail address.";
case MembershipCreateStatus.InvalidPassword:
return "The password provided is invalid. Please enter a valid password value.";
case MembershipCreateStatus.InvalidEmail:
return "The e-mail address provided is invalid. Please check the value and try again.";
case MembershipCreateStatus.InvalidAnswer:
return "The password retrieval answer provided is invalid. Please check the value and try again.";
case MembershipCreateStatus.InvalidQuestion:
return "The password retrieval question provided is invalid. Please check the value and try again.";
case MembershipCreateStatus.InvalidUserName:
return "The user name provided is invalid. Please check the value and try again.";
case MembershipCreateStatus.ProviderError:
return "The authentication provider returned an error. Please verify your entry and try again. If the problem persists, please contact your system administrator.";
case MembershipCreateStatus.UserRejected:
return "The user creation request has been canceled. Please verify your entry and try again. If the problem persists, please contact your system administrator.";
default:
return "An unknown error occurred. Please verify your entry and try again. If the problem persists, please contact your system administrator.";
}
(9)点击“项目”选择“ASP.NET配置”,选择“安全”,之后弹出的内容将以图片展示:
角色管理
Roles类
ASP.NET网站管理配置工具(WAST)提供一个可视化界面用于建立用户和角色的关系。角色管理API中包括多个类,最重要的是Roles类。该类分割了用户界面与执行底层数据访问的角色管理提供程序,从而为快速实现多种数据源存储的角色管理应用提供了技术支持。
Roles类具有以下功能:
1.创建和管理角色
2.将角色信息存储在SQL Server或其他数据源中
3.获取有关角色管理配置的详细内容
Roles类的主要方法:
创建Roles类的代码文件:
在“WebApplocation”右键点击“添加”——“新建项”,弹出“添加新项”,添加新的项目,更改名称。