2.2 配置安全授权
授权是指识别用户是否可以访问特定资源的过程。可以通过向Web配置文件添加authorization节点来控制授权。
不管应用程序启用任何类型的鉴别类型,都会使用相同的方法进行授权。换句话说,即使是在使用Forms、Windows和.NET Passport鉴别时,也都使用相同的方法来为其进行授权。
一般来说,我们会将所有需要密码保护的页面放在单独的文件夹中。如果向该文件夹中添加一个Web配置文件,那么该Web配置文件的设置将会应用到该文件夹以及其子文件夹中的所有页面上。
例如,如果将代码清单2-10中的Web配置文件添加到该文件夹中,那么任何未获得授权的用户访问该文件夹中的任何页面,都会被拒绝。
代码清单2-10 Web.Config
<?xml version="1.0"?>
<configuration>
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</configuration>
如果将代码清单2-10中的文件添加到该文件夹中,那么未授权的用户将不能访问该文件夹下的任何页面。当启用了Forms鉴别后,未授权用户的访问将会自动地重定向到Login页面。
代码清单2-11中的Web配置文件包含了一个authorization节点,同时该节点定义了一个简单的授权规则。匿名用户不能访问配置文件。符号?表示匿名(未鉴别)用户。
下面两个特殊的符号可以用于users属性:
· ?——用于表示未鉴别用户;
· *——用于表示所有用户(未鉴别和已鉴别)。
属性deny可以设置为指定的用户名或者以逗号为分割符的用户名列表。例如,代码清单2-11中的authorization节点允许名为Jane的用户访问,同时禁止其他任何人访问(甚至是已鉴别用户)。
代码清单2-11 SecretFile/Web.Config
<?xml version="1.0"?>
<configuration>
<system.web>
<authorization>
<allow users="Jane" />
<deny users="*" />
</authorization>
</system.web>
</configuration>
授权规则的设置顺序非常重要。ASP.NET Framework使用短路匹配算法。如果交换代码清单2-11中allow和deny属性规则的定义次序,那么没有任何人,Jane也不例外,可以允许访问该配置文件所在文件夹下的页面。
注解 要防止匿名用户访问应用程序中的任何页面,可以通过向该应用程序根目录的Web配置中添加authorization节点。不过在这样的情况下,是需要允许匿名用户访问Login页面的(否则在使用Forms鉴别时,将没有任何用户可以登录该应用程度)。
|
2.2.1 角色授权
在创建鉴别规则时,还可以通过用户角色进行鉴别。例如,代码清单2-12中的Web配置文件将防止除管理员组外的任何用户访问其文件夹下的任何页面。
代码清单2-12 Web.Config
<?xml version="1.0"?>
<configuration>
<system.web>
<authorization>
<allow roles="Administrator"/>
<deny users="*"/>
</authorization>
</system.web>
</configuration>
当应用程序启用了Forms鉴别后,role属性所表示的是自定义角色。在2.4节中,将介绍如何配置和创建自定的角色。如果应用程序启用了Windows鉴别,那么role属性所表示的是微软Windows组。
2.2.2 根据位置授权访问文件
在默认情况下,授权规则会应用到该文件夹以及其子文件夹中的所有页面上。然而,也可以在authorization节点中使用location节点选项。使用location节点可以将授权规则应用到文件夹或特定路径的页面上。
例如,假设你只需要使用密码来保护一个,仅仅只是一个文件夹中的页面。在那样的情况下,就可以使用location节点来指定单个文件的路径。代码清单2-13中的Web配置文件使用密码来保护了一个名为Secret.aspx的页面。
代码清单2-13 Web.Config
<?xml version="1.0"?>
<configuration>
<system.web>
<authentication mode="Forms" />
</system.web>
<location path="Secret.aspx">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
</configuration>
location节点也可以将配置信息应用到特定的子文件夹中。例如,代码清单2-14中的Web配置文件通过密码来保护了名为SecretFiles的文件夹。
代码清单2-14 Web.Config
<?xml version="1.0"?>
<configuration>
<system.web>
<authentication mode="Forms" />
</system.web>
<location path="SecretFiles">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
</configuration>
2.2.3 对图片以及其他文件类型进行访问授权
我们之前所讨论的授权规则只能应用到已关联到ASP.NET Framework中的文件类型上。Visual Web Developer Web服务器端将所有的文件类型关联到了ASP.NET Framework中。另一方面,IIS只将特定的文件类型关联到了ASP.NET Framework中。
如果应用程序使用IIS,并且将一图片文件添加到该应用程序受密码报复的文件夹中,这时用户对该图片文件的访问请求并不会被阻止。在默认情况下,鉴别规则只被应用到了诸如ASP.NET页面这样的文件类型上。而对于图片、微软Word文档和传统的ASP页面等文件类型都被ASP.NET Framework忽略了。
如果你需要使用密码来保护特定类型的静态文件,例如图片或微软Word文档等,那么需要将这些类型文件的扩展名关联到ASP.NET ISAPI扩展中。
例如,遵照下列这些步骤将启用对.gif类型图片文件的授权管理:
(1) 通过点击Start(开始)→Control Panel(控制面板)→Administrator Tools(管理工具)→IIS(Internet信息服务),打开IIS管理器。
(2) 打开特定Web站点或虚拟目录的属性设置窗口。
(3) 通过选取Directory(目录)选项卡并点击Configuration(配置)按钮,开启Application Configuration(应用程序配置)对话框。
(4) 选取并点击Mapping(映射)选项卡(见图2-3)。
(5) 点击Add(添加)按钮以开启添加/编辑(Add/Edit)应用程序扩展名映射对话框。
(6) 在Executable(可执行)表单项中,输入ASP.NET ISAPI动态链接库的路径(也可以通过编辑.aspx扩展名映射,来复制并粘贴该路径)。
(7) 在Extension(扩展名)表单项中填入.gif。
当完成了以上步骤后,对.gif图片文件的请求将会传给ASP.NET Framework。同时也就可以对.gif类型文件进行统一的鉴别和授权。
遵照以上步骤及操作顺序,可以对其他类型静态文件设置密码保护功能,例如微软Word文档、Excel电子表格和视频文件等。
2.2.4 对传统ASP页面进行访问授权
虽然在同一个应用程序中可以混合使用ASP.NET页面和传统ASP页面。然而,普通的ASP.NET页面和传统的ASP页面运行在彼此独立的程序域中。特别需要注意的是,ASP.NET的鉴别和授权都不能应用到传统的ASP页面上。
如果你使用IIS6(该版本IIS位于Windows Server 2003中),那么可以将传统ASP页面映射到ASP.NET Framework中。在那样的设置下,ASP.NET授权规则将应用到传统ASP页面上。
IIS6支持一个名为通配符应用程序映射(wildcard application mapping)的功能。所以可以通过通配符来截获对传统ASP页面的请求,并将该请求交由ASP.NET Framework进行处理。通过鉴别和授权检验后,ASP.NET Framework再将该请求转发给传统ASP模块进行处理。
要启用ASP.NET的通配符映射,需要执行以下步骤:
(1) 点击Start(开始)→Control Panel(控制面板)→Administrator Tools(管理工具)→IIS(Internet信息服务),打开IIS管理器。
(2) 打开指定目录或虚拟目录的属性窗口。
(3) 选中Directory(目录)选项卡并点击Configuration(配置)按钮,以开启应用程序配置对话框。
(4) 选中Mapping(映射)选项卡。
(5) 点击映射选项卡底部的Insert(插入)按钮,以开启Add/Edit(添加/删除)应用程序扩展名映射对话框(见图2-4)。
(6) 在扩展名输入框中输入ASP.NET ISAPI动态链接库的路径(该路径也可以从.aspx扩展名的映射设置上进行复制,并粘贴到该输入框中)。
在完成了以上步骤之后,那么对所有文件(不仅仅是传统ASP文件)的访问请求,都会映射到ASP.NET Framework上。这样一来,就可以使用与保护ASP.NET页面的相同方法来通过ASP.NET授权规则保护传统ASP页面。该应用中的授权规则同时也对诸如图像文件、微软Word文档和其他类型文件生效。