一个尚未讨论的问题是应用程序的身份验证是如何实现的,以及ASP.NET为身份验证提供了哪些选择。到目前为止,所有示例都依赖一种称为Forms身份验证的技术。那么,什么是Froms身份验证,其他的身份验证技术有哪些?
●Forms身份验证:要发出登录请求,需要在网页上填写一个表单并将该表单提交到服务器。服务器在接受该请求之后,将向用户的本地机器写一个cookie,在后续的浏览中,浏览器每次发送请求时都会将该cookie送回服务器,这样用户就可以根据自己的希望保持身份验证状态。
●Windows身份验证:登录页面将用户证书发送到Web服务器(只能是IIS,而不是VWD内建的Web服务器)。然后Web服务器使用应用程序所运行的虚拟目录配置的方法处理身份验证。IIS连接到Windows操作系统和Active Directory(活动目录)域结构上,这意味着它依赖于存储在站点外部的用户配置文件,并使用标准Windows证书登录到站点。根据站点的配置情况以及登录计算机所使用的账户,甚至可以不用直接登录站点,因为当前所使用的Windows证书会自动传递到Web服务器进行身份验证。这种方式在开发局域网应用程序时特别有用。
●Passport身份验证:登录证书被传递到某个Microsoft Passport服务器,这个服务器集中保存了用户的配置文件。登录Hotmail账户使用的就是这种方式。由于可以配置Windows在启动时登录一个Passport账户,因此在访问Hotmail收件箱时甚至都不需输入口令。
Forms身份验证模式
本节讨论Forms身份验证的工作原理。考虑以下情景:
●用户—— 假设是Bob—— 希望查看页面A,匿名用户不可以访问这个页面,因此当Bob试图访问页面A时,浏览器取而代之显示一个登录页面,如图4-29所示。
图 4-29
●Bob现在面对着登录页面。由于Bob以前已经在该站点上注册过,因此他使用他的用户名和口令组合登录这个站点。图4-30显示了Bob的浏览器和服务器之间的交互过程。
图 4-30
●Bob现在可以浏览页面A并因此感到高兴。现在Bob希望通过页面A上的一个链接查看页面B。在发送该页面的请求时,Bob的浏览器同时将cookie的一个副本发送到服务器,让服务器知道是Bob想要查看这个页面。服务器知道Bob的身份,而且喜欢Bob,所以根据请求将页面B发送给Bob,如图4-31所示。
图 4-31
●如果Bob现在请求站点的主页,浏览器仍会将cookie和请求一起发送到服务器,因此即使主页不是受限的内容,cookie仍会被传递回服务器。由于主页没有受到限制,服务器不会考虑cookie,直接忽略它并将主页发送给Bob。
●Bob接着返回页面A。因为Bob机器上的cookie仍然是有效的,所以该cookie仍会被送回服务器。服务器也仍然喜欢Bob,所以它允许Bob浏览这个页面。
●Bob离开计算机并享受了一杯咖啡。然后去吃午饭。当他重新回到计算机前时,已经过了25分钟。Bob现在希望再次浏览页面B,但是他机器上的cookie已经过期了。服务器在接收页面请求时没有得到cookie,所以Bob必须重新登录。
一般都会将用户机器上的cookie设置为在一定时间之后过期。在上面的情景中,服务器为cookie指定了20分钟的有效期,这意味着只要在20分钟之内向服务器发送两次请求,本地机器上的cookie就将一直保持活动状态。然而,如果20分钟之内没有向站点发出请求,用户将必须重新登录才能查看受限的内容。
您将注意到在前面的示例中创建的登录页面为用户提供了“remember my details for next time”(记住用户名)选项。选中该选项将在浏览器的cookie集中写入一个有效时间更为长久的cookie,在下次访问这个站点的时候,您的账户名将提前显示在页面上。由于不应将口令信息保存在cookie中,因此每次登录都必须输入口令,但至少不用输入用户名字段。
其他的身份验证方法(Windows身份验证和Passport身份验证)提供的终端用户都比较熟悉。例如,Windows身份验证模式依赖于Web服务器(一般情况下都是IIS)来控制站点的访问权限,但也可以同时使用过期机制阻塞空闲了过长时间的用户。要配置Windows身份验证,需要指定位于公司Active Directory(AD)域内的哪些用户或角色可以访问站点。然后这些用户就可以使用登录公司网络上的计算机时所用的登录信息访问站点。
也可以在公司的外部环境中查看使用Windows身份验证模式的站点,只不过在试图查看一个由Windows身份验证模式保护的页面时必须输入标准Windows登录证书。
Passport身份验证模式的普及率没有Microsoft期望的那么高,但确实有一些站点连接到Passport网络处理站点的身份验证(例如,Expedia.com)。Passport身份验证依赖于存储用户账户的数据库,该数据库可以通过任意线路进行访问,有点类似于保存Web账户的中心Active Directory。
本书使用Forms身份验证处理Wrox United站点的所有身份验证。
如果希望在Wrox United站点包含一些个性化信息,那么必须为其配置安全策略。已完成的站点中(www.wroxunited.net)具有购物车功能。另外,完成后的站点中还有一个管理区,允许管理员在其中编辑预定日期、修改成员资料等。所有这些都意味着必须在某个阶段添加一些用户和角色—— 由于您已经具有使用配置工具的充足经验,现在应该可以执行这个过程的第一个步骤。下面的“试一试”练习将带领您逐步为Wrox United站点配置用户账户和角色。在这个阶段,不必担心锁定了站点的部分内容;这是本书后续部分的任务。
试一试:在Wrox United站点内部配置安全性(1) 先在VWD中打开本章的Wrox United示例站点。在打开该站点之后,单击Website菜单并选择ASP.NET Configuration。这将启动站点的配置工具。图4-32显示已完成的站点的配置界面。
图 4-32
(2) 单击Security链接进入配置用户和角色的选项页。与在本章前面的练习中进行的操作一样,启动安全设置向导。在操作该向导的过程中,选择如下内容:
● 该应用程序将使用在Internet上。
●激活角色。
●如果不存在角色,创建以下角色:Administrator、FanClubMember、Manager、Owner和Reporter(如图4-33所示)。
图 4-33
●最后,创建用户账户—— 最少创建5个用户账户以便在每个角色中至少有一个账户。Wrox United应用程序预定义的用户账户如图4-34所示。
图 4-34
查看一下完整应用程序的配置可以看到预定义的用户账户分属于不同的角色,所以ChrisH账户是Reporter角色的成员,Jim是Owners角色的成员,而Lou是Fan Club角色的成员。
(3) 向导结束之后,需要在WroxUnited目录内创建一些子文件夹,它们将包含站点的特定部分—— Admin和FanClub部分。
(4) 现在可以进入管理Access Rules的区域添加以下规则:
●对WroxUnited主文件夹,允许匿名访问。
●对FanClub文件夹,首先拒绝所有用户访问,然后添加一个规则,只允许FanClub角色的成员进行访问。
●对Admin文件夹,拒绝所有用户访问。
由于现在还不会用到这些用户账户和角色,因此暂时不必对站点进行其他处理。然而,在创建站点的其他页面时这些准备工作将为以后的工作打下很好的基础。
操作回顾在Wrox United应用程序中,可以看到一个功能完整的Web应用程序的配置信息。可以使用管理工具和Web.config文件任意查看这些配置,从而弄清楚这些基本权限是怎么设置的。这个示例只是简单介绍本书后面的内容,因为第11章详细讨论基于角色的权限控制并介绍其他通过使用角色允许和限制内容的技术。
用于过滤FanClub文件夹访问权限的代码已添加到FanClub文件夹内的Web.config文件中。如下所示:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<authorization>
<allow roles="FanClubMember" />
<deny users="*" />
</authorization>
</system.web>
</configuration>
注意FanClubMember角色被定义成惟一能够访问该文件夹内的内容的角色。
这个示例中创建的目录级别的权限已经在站点内创建了一个受限区域。第11章将在Administration小节和Fan Club小节中带领您进行一些练习,演示ASP.NET 2.0技术的不同组成部分。这些示例是基于对本节内容的理解之上的。
本章讨论了安全的基础内容、身份的概念以及登录站点的过程。有些概念对于任何使用Internet在网上冲浪、参加社区讨论或者在线购物的人来说都是很熟悉的,而且由于这些概念的使用范围是如此广泛,因此ASP.NET 2.0专门针对这些功能进行了设计,从而简化站点的创建工作。
需要理解的核心概念包括:
●Identity:身份,一个个体由一组属性进行描述,这些属性保证个体的惟一性。
●Authentication:身份验证,向服务器传送一组证书信息从而使服务器标识用户的身份。如果服务器可以标识试图进行连接的用户,那么用户将通过验证。
●Authorization:授权,将已通过验证的用户证书和一组访问控制规则进行比较,从而针对“这个用户能够访问所请求的资源吗?”这个问题给出答案。
●Personalization:个性化,根据当前登录的用户提供特定的信息。
●Membership:成员关系,表示归属的概念。本章讨论了用户属于特定角色的概念。
下一章将扩展个性化的概念介绍怎样实现ASP.NET站点的个性化。
(1) 修改本章中Wrox United应用程序的访问权限,允许匿名用户访问,但拒绝某个特定用户账户访问。
(2) 本章的示例站点中添加一个名为Admin的子文件夹。在该文件夹中,添加一个带有LoginName控件的页面,将其命名为MainAdmin.aspx,还可以在该页面上放置其他控件。修改这个文件夹的访问权限使得只有Administrators群组的成员能够访问它。c