ASP.NET 授权
更新:2007 年 11 月
授权决定了是否应授予某个标识对特定资源的访问权限。在 ASP.NET 中,有两种方式来授予对给定资源的访问权限:
文件授权 文件授权由 FileAuthorizationModule 执行。它检查 .aspx 或 .asmx 处理程序文件的访问控制列表 (ACL) 以确定用户是否应该具有对文件的访问权限。ACL 权限用于验证用户的 Windows 标识(如果已启用 Windows 身份验证)或 ASP.NET 进程的 Windows 标识。有关更多信息,请参见 ASP.NET 模拟。
URL 授权 URL 授权由 UrlAuthorizationModule 执行,它将用户和角色映射到 ASP.NET 应用程序中的 URL。这个模块可用于有选择地允许或拒绝特定用户或角色对应用程序的任意部分(通常为目录)的访问权限。
使用 URL 授权
通过 URL 授权,您可以显式允许或拒绝某个用户名或角色对特定目录的访问权限。为此,请在该目录的配置文件中创建一个 authorization 节。若要启用 URL 授权,请在配置文件的 authorization 节中的 allow 或 deny 元素中指定一个用户或角色列表。为目录建立的权限也会应用到其子目录,除非子目录中的配置文件重写这些权限。
下面显示了 authorization 节的语法:
<authorization>
<[allow|deny] usersrolesverbs />
</authorization>
allow 或 deny 元素是必需的。必须指定 users 或 roles 属性。可以同时包含二者,但这不是必需的。verbs 属性可选。
allow 和 deny 元素分别授予访问权限和撤消访问权限。每个元素都支持下表所示的属性:
属性 |
说明 |
---|---|
users |
标识此元素的目标身份(用户帐户)。 用问号 (?) 标识匿名用户。可以用星号 (*) 指定所有经过身份验证的用户。 |
roles |
为被允许或被拒绝访问资源的当前请求标识一个角色(RolePrincipal 对象)。有关更多信息,请参见使用角色管理授权。 |
verbs |
定义操作所要应用到的 HTTP 谓词,如 GET、HEAD 和 POST。默认值为“*”,它指定了所有谓词。 |
下面的示例对 Kim 标识和 Admins 角色的成员授予访问权限,对 John 标识(除非 Admins 角色中包含 John 标识)和所有匿名用户拒绝访问权限:
<authorization>
<allow users="Kim"/>
<allow roles="Admins"/>
<deny users="John"/>
<deny users="?"/>
</authorization>
下面的 authorization 节演示如何允许 John 标识的访问权限并拒绝所有其他用户的访问权限:
<authorization>
<allow users="John"/>
<deny users="*"/>
</authorization>
可以使用逗号分隔的列表为 users 和 roles 属性指定多个实体,如下面的示例所示:
<allow users="John, Kim, contoso\Jane"/>
请注意,如果指定一个域帐户名,该名称必须包含域名和用户名 (contoso\Jane)。
下面的示例允许所有用户对某个资源执行 HTTP GET 操作,但是只允许 Kim 标识执行 POST 操作:
<authorization>
<allow verbs="GET" users="*"/>
<allow verbs="POST" users="Kim"/>
<deny verbs="POST" users="*"/>
</authorization>
规则应用如下:
应用程序级别的配置文件中包含的规则优先级高于继承的规则。系统通过构造一个 URL 的所有规则的合并列表,其中最近(层次结构中距离最近)的规则位于列表头,来确定哪条规则优先。
给定应用程序的一组合并的规则,ASP.NET 从列表头开始,检查规则直至找到第一个匹配项为止。ASP.NET 的默认配置包含向所有用户授权的 <allow users="*"> 元素。(默认情况下,最后应用该规则。)如果其他授权规则都不匹配,则允许该请求。如果找到匹配项并且它是 deny 元素,则向该请求返回 401 HTTP 状态代码。如果 allow 元素匹配,则模块允许进一步处理该请求。
还可以在配置文件中创建一个 location 元素以指定特定文件或目录,location 元素中的设置将应用于这个文件或目录。