授权的目的是确定是否为标识授予对给定资源访问的请求类型。有两种对给定资源进行授权访问的基本方法:
文件授权由 FileAuthorizationModule 执行,且当使用 Windows 身份验证时,文件授权处于活动状态。它对 .aspx 或 .asmx 处理程序文件进行访问控制列表 (ACL) 的检查,以确定用户是否应具有访问权。应用程序可以进一步使用模拟方法对所访问的资源进行资源检查。有关模拟的详细信息,请参阅 ASP.NET 模拟。
URL 授权由 URLAuthorizationModule 类执行,该类会将用户和角色映射到 URL 名称空间的各个部分中。该模块可以实现肯定和否定的授权断言。也就是说,可以使用该模块选择性地允许或拒绝特定的集合、用户以及角色对 URL 名称空间中任意部分的访问。
URLAuthorizationModule 在任何时候都是可用的。仅需将用户和/或角色列表放在某个配置文件的 <authorization> 部分中的 <allow> 或 <deny> 元素中。
要建立访问某一特定目录的条件,必须将含有 <authorization> 部分的配置文件放进该目录中。为该目录所设置的条件也适用于其子目录,除非子目录中的配置文件覆盖了这些条件。该部分中的一般语法如下:
<[element] [users] [roles] [verbs]/>
element 是必需的。必须包含 users 或 roles 属性。也可同时包含两个,但包含两个并不是必需的。verbs 属性是可选的。
允许的元素是 <allow> 和 <deny>,分别用于授予和撤销访问权限。每个元素都支持三种属性,其定义如下表所示。
属性 | 描述 |
---|---|
roles | 为该元素识别目标角色。该请求的相关 IPrincipal 对象确定角色的成员身份。可以将任意 IPrincipal 对象附加到给定请求的上下文中,然后这些对象可以用您选择的任何方法来确定角色成员身份。例如,默认的 WindowsPrincipal 类使用 Microsoft Windows NT 组来确定角色成员身份。 |
users | 为该元素识别目标标识。 |
verbs | 定义操作所应用的 HTTP 动作,例如,GET、HEAD 和 POST。 |
也拒绝匿名用户。
下例将访问权限授予 Kim 和 Admins 角色的成员,同时拒绝 John 和所有匿名用户的访问:
<authorization>
<allow users="Kim"/>
<allow roles="Admins"/>
<deny users="John"/>
<deny users="?"/>
</authorization>
用户和角色都可以使用由逗号分隔的列表引用多个实体,如下例所示。
<allow users="John, Kim, contoso\Jane"/>
请注意域账号 (contoso\Jane
) 必需包含域名和用户名的组合。
除了标识名称外,还有两种特殊标识,如下表所示。
标识 | 描述 |
---|---|
* | 引用所有标识 |
? | 引用匿名标识 |
要允许 John 而拒绝任何其他用户的访问,可能要构建如下的配置部分。
<authorization>
<allow users="John"/>
<deny users="*"/>
</authorization>
下例使每个人都可以执行 GET 动作,但只有 Kim 才能使用 POST。
<authorization>
<allow verb="GET" users="*"/>
<allow verb="POST" users="Kim"/>
<deny verb="POST" users="*"/>
</authorization>
使用下面的启发式方法来应用规则:
如果 <allow> 匹配,模块将不做任何处理,而是让该请求继续进行。
还可以使用 <location> 标记来指定某个特定文件或目录,该标记(在 <location> 和 </location> 标记之间)包括的设置要应用于该特定文件或目录。