新增的管理功能
ASP.NET 1.x的另一个明显的缺陷(已经在ASP.NET 2.0中得到修复)是根本没有用于管理Web站点的接口(无论是声明性接口还是编程接口)。在过去,更改配置设置意味着启动记事本并编辑 Machine.config或Web.config,但现在不再需要这么做了。ASP.NET 2.0具有一个完善的管理API,它简化了读取和写入配置设置的任务。它还包括一个管理GUI,您可以通过在浏览器中请求Webadmin.axd来显示该GUI,如图8所示。
图2 管理GUI
尽管在撰写本文时尚不完善,但Webadmin.axd被设计为使您可以配置ASP.NET 2.0中包含的各种服务(如成员身份和角色管理服务)、查看Web站点统计信息以及应用安全设置。
成员身份服务
ASP.NET 2.0中新增的最佳功能之一是新的成员身份服务,它提供了用于创建和管理用户帐户的易于使用的API。ASP.NET 1.x大规模引入了窗体身份验证,但仍然要求您编写相当数量的代码来执行实际操作中的窗体身份验证。成员身份服务填补了ASP.NET 1.x窗体身份验证服务的不足,并且使实现窗体身份验证变得比以前简单得多。
成员身份API通过两个新的类公开: Membership和MembershipUser。前者包含了用于创建用户、验证用户以及完成其他工作的静态方法。MembershipUser代表单个用户,它包含了用于检索和更改密码、获取上次登录日期以及完成类似工作的方法和属性。例如,下面的语句采用用户名和密码作为参数,并返回true或 false来指示它们是否有效。它取代了对ASP.NET 1.x应用程序中、使用Active Directory?或后端数据库来验证凭据的简易方法的调用,如下所示:
bool isValid = Membership.ValidateUser (username, password);
下面的语句返回一个MembershipUser对象,该对象表示用户名为“jeffpro”的用户:
MembershipUser user = Membership.GetUser ("jeffpro");
以下语句检索一个已注册用户的电子邮件地址(假设记录了电子邮件地址):
string email = user.Email;
成员身份服务所管理的用户名、密码和其他数据存储在哪里?像ASP.NET 2.0中的几乎所有状态管理服务一样,成员身份是基于提供程序的。提供程序是使服务可以与物理数据源进行交互的模块。ASP.NET 2.0将包含Microsoft Access数据库、SQL Server数据库和Active Directory的成员身份提供程序,并且还可能包含其他数据存储的成员身份提供程序。
默认情况下,成员身份服务使用Access 提供程序,并将成员身份数据存储在应用程序的Data子目录中名为AspNetDB.mdb的文件中。可以通过Web.config的部分选择备用提供程序。可以让Webadmin.axd修改Web.config,而不必自己进行修改。下面的内容节选自Web.config(在Webadmin.axd 创建了一个名为WhidbeyLogin的SQL Server?数据库,并将成员身份服务配置为使用该数据库之后):
<membership defaultProvider="WhidbeyLogin">
<providers>
<add name="WhidbeyLogin"
type="System.Web.Security.SqlMembershipProvider, ..."
connectionStringName="webAdminConnection632112624221191376"
applicationName="/Whidbey" requiresUniqueEmail="false"
enablePasswordRetrieval="true" enablePasswordReset="false"
requiresQuestionAndAnswer="false"
passwordFormat="Encrypted"
/>
</providers>
</membership>
connectionStringName属性引用了Web.config的新部分中的连接字符串。ASP.NET 2.0将包含加密这部分的Web.config以保护数据库连接字符串的能力。
Webadmin.axd的用途并不仅限于创建数据库和选择成员身份提供程序:它还可以用于创建用户、管理凭据以及其他用途。在 Webadmin.axd和成员身份API之间,还存在用于管理站点注册用户的声明性手段和编程手段。这是从ASP.NET 1.x向前迈出的一大步,它在很大程度上将凭据管理的问题留给用户自己去处理。
登录控件
成员身份服务本身就显著减少了验证登录和管理用户所需的代码量,此外还有一系列称为登录控件的新控件使窗体身份验证变得更加容易。登录控件可以与成员身份服务配合使用,也可以不与其配合使用,但它们与该服务之间的集成性非常好,以至于当登录控件与成员身份服务一起使用时,一些基本任务(例如,验证用户名和密码以及用电子邮件发送遗忘的密码)通常不必编写任何代码就可以完成。“新增控件”提要栏包含了计划随ASP.NET 2.0一起提供的一系列登录控件。
图3 Login控件
图3中所示的Login控件是登录控件系列的核心控件。除了提供具有高度可自定义性的UI以外,它还能够调用 Membership.ValidateUser来验证用户名和密码。Login控件还可以调用 FormsAuthentication.RedirectFromLoginPage,将用户重定向到他们在被重定向到登录页时尝试到达的页面。然后, FormsAuthentication.RedirectFromLoginPage将发出身份验证Cookie。在本文稍后的部分中,您将看到 Login和其他登录控件的工作方式。
