理解 ASP.NET 角色和成员资格 - 初学者教程






4.77/5 (32投票s)
ASP.NET 如何让我们在其中设置身份验证和授权机制来创建网站,以及如何使用 ASP.NET 服务器控件快速有效地实现这一点。
引言
你见过多少需要你登录的网站?我想这个问题的答案是“几乎所有”。好吧,这篇文章的目的是了解 ASP.NET 如何让我们在其中设置身份验证和授权机制来创建网站,以及如何使用 ASP.NET 服务器控件快速有效地实现这一点。
背景
当我们在处理身份验证和授权是关键要求的应用程序时,我们会发现 ASP.NET 角色和成员资格功能非常有用。身份验证意味着验证用户。在此步骤中,我们验证用户凭据,以检查尝试登录的人是否是正确的人。另一方面,授权是跟踪当前用户被允许查看什么,以及什么应该对他隐藏。它更像是保留一个注册表,用于显示什么和不显示什么给用户。
每当用户登录时,他都必须用其凭据进行身份验证。一旦他通过身份验证,他将被授权查看网站的资源/页面。这两个概念通常是并行的,ASP.NET 为我们提供了一些服务器控件,它们开箱即用地提供了大量的样板功能。如果我们使用 ASP.NET 的身份验证和授权机制,那么我们可以专注于什么应该被授权,以及谁应该被验证,而不是担心如何做到这一点。
Using the Code
ASP.NET 提供了许多用于促进身份验证机制的控件。ASP.NET 为身份验证提供的一些控件是:
Login
:允许用户使用其凭据登录PasswordRecovery
:此控件允许用户恢复其密码。CreateUserWizard
:此控件允许用户在网站上创建帐户。ChangePasword
:此控件允许用户更改其密码。LoginStatus
:这将显示用户是否已登录。LoginName
:这将显示已登录用户的姓名。
对于授权部分,角色是 ASP.NET 用于授权用户的机制。每个用户属于一个或多个角色,我们网站的网页是针对角色配置的。因此,如果一个用户属于被允许查看特定页面的角色,他将能够查看。
现在让我们编写一个小应用程序,看看这些控件和概念是如何工作的。我们将开发一个小型网站,该网站有三种类型的用户 - 免费用户、普通用户和高级用户。每种类型的用户都可以看到他们各自的下载列表以及低级别角色的下载列表,即,高级用户可以看到普通用户列表和免费用户列表,普通用户可以看到免费用户列表,等等。所以让我们先创建网页层次结构来实现这一点。
因此,我们为每个角色创建了单独的文件夹,顶层将包含免费用户的文件。现在我们将配置这些文件夹的访问权限。我们希望在应用程序中有两个角色:普通和高级,其余用户将被视为免费用户。
让我们使用 WSAT(网站管理工具)创建角色。
一旦我们创建了角色,我们就可以创建访问规则。
这可以通过 WSAT 完成,也可以直接从web.config完成。以下是为“高级用户”配置的web.config。
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<system.web>
<authorization>
<allow roles="Premium" />
<deny users="*" />
</authorization>
</system.web>
</configuration>
<pre lang="xml">
完成这些之后,我们就确保了相应的文件夹只能在用户属于某个角色时才能访问。所以现在很明显,下一步将是创建用户并为他们分配角色。
在创建用户之前,让我们了解我们可以使用两种类型的身份验证
- Windows 身份验证:在此类型中,用户使用其 Windows 用户名和密码进行身份验证。在 Internet 场景中,此方法不推荐使用。在 Internet 场景中,我们应始终使用“基于窗体的身份验证”。
- 基于窗体的身份验证:在此身份验证类型中,用户必须明确提供其凭据,一旦服务器验证了这些凭据,用户就可以登录。
所以我们将使用基于窗体的身份验证。我们可以从 WSAT 创建用户并为他们分配角色。
除此之外,我们还将使用 ASP.NET 服务器控件从应用程序前端创建用户。我们将有一个CreateUserWizard
控件来实现此目的。
注意:我们可以使用Membership
类在代码中执行用户管理任务,例如创建、删除或修改用户帐户。
要分配角色,我们将必须这样做
protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e)
{
if (RadioButtonList1.SelectedValue == "0")
{
string username = CreateUserWizard1.UserName;
Roles.AddUserToRole(username, "Regular");
}
else if (RadioButtonList1.SelectedValue == "1")
{
string username = CreateUserWizard1.UserName;
Roles.AddUserToRole(username, "Premium");
}
}
我们将使用Login
控件让用户登录。
我们还在导航区域添加了LoginStatus
和LoginName
等控件,以显示登录状态和已登录用户的姓名。
现在让我们看看我们的应用程序中有哪些页面,以及哪个用户可以访问哪个页面(除了主页)。
任何未登录用户以及所有普通用户和高级用户都可以访问此页面。
此页面只能由普通用户和高级用户访问。
此页面只能由高级用户访问。
现在我们有了一个基本的 Web 应用程序,其中配置了角色。此应用程序使用了 ASP.NET 提供的所有身份验证和授权功能。
关注点
本文讨论了 ASP.NET 提供的身份验证和授权机制。本文是从初学者的角度撰写的。这不应被视为 ASP.NET 角色和成员资格的全面教程,而应作为学习 ASP.NET 角色和成员资格的起点。
历史
- 2012 年 3 月 5 日:初版。