信任级别与使用 <securityPolicy> 配置元素相关联,该配置元素仅在站点级别 (Web.config) 配置文件中有效。
<system.web>
<securityPolicy>
<trustLevel name="Full" policyFile="internal"/>
<trustLevel name="High" policyFile="web_hightrust.config"/>
<trustLevel name="Medium" policyFile="web_mediumtrust.config"/>
<trustLevel name="Low" policyFile="web_lowtrust.config"/>
<trustLevel name="Minimal" policyFile="web_minimaltrust.config"/>
</securityPolicy>
</system.web>
如果不希望让应用程序指定其自身的信任级别(大多数共享服务器方案中的情况),您应注意使用属性 allowOverride=False 指定 <location> 指令。您可以删除信任级别或通过在指定所要使用的信任级别名称和策略文件的配置节中添加项目来添加信任级别。默认的信任级别将安装在 config 目录中,aspnet_isapi.dll 存储在该位置下。该位置与 Machine.config 配置文件和运行库安全策略文件的位置相同。
Full 信任级别是一种特殊情况。因为它完全等同于在本地计算机区域拥有的全部信任,所以 ASP.NET 主机不会将任何其他的策略应用到这些应用程序中。因此,它被映射到内部处理程序,且主机不会向 Full 信任应用程序的应用程序域添加其他策略。
为了保留默认设置,ASP.NET 将附带每个默认文件的两份副本。一份副本就如上面在配置节中描述的那样,第二份拷贝将具有 .default.config 扩展名,而且系统不会直接使用它。
各种不同信任级别的应用程序域策略由策略级别组成,例如,作为应用程序域策略载入并应用到应用程序域的 System.Security.Policy.PolicyLevel 类的实例。策略树本身与 High、Medium、Low 和 Minimal 信任级别是相同的(不会向 Full 应用任何策略),但 ASP.NET 权限集中的许可权限集除外。下表显示了具有 High 信任级别权限的策略树。
如果要找到全局程序集缓存的位置,请在注册表项 HKLM\Software\Microsoft\Fusion 中检查“CacheLocation
”。如果此项不存在,则将默认位置为 %windir%\assembly
。
使用 UrlMembershipCondition 对象的三个代码组依赖于在运行时动态计算的路径;ASP.NET 将载入策略文件并替换进行专门分隔的参数(例如,它在执行策略解析前用适当路径替换 $AppDirUrl$
)。
在计算给定应用程序的应用程序域策略后(在该步骤中不必执行 Full 信任应用程序),该策略会被应用到应用程序域。应用程序域策略与各种其他不同的策略级别(企业级、计算机级和用户级)交叉在一起,所以它只能进一步限制但不能扩展现有策略。
要查看如何将应用程序域策略用于限制授予的权限,请考虑下表中显示的虚构权限集。
级别 | 名称 | 权限 |
---|---|---|
企业 | P1 | {A, B, C, D} |
计算机 | P2 | {A, B, C} |
用户 | P3 | {A, B, C} |
应用程序域 | P4 | {A, B} |
这些策略集的简化应用程序权限(忽略权限请求)可能会是在不同级别所授予的权限的交集。因此,P1、P2、P3 和 P4 的交集是 {A, B}。
策略文件可以进行手动编辑。您可以使用“.NET Framework 配置工具”或“代码访问策略工具”管理企业级、计算机级和用户级的安全策略。有关使用这些工具的详细信息,请参考 .NET Framework 帮助中的“管理安全策略”主题。