当前位置:首页 > 技术学堂 > 综合技术 > 正文 win2003 ASP.NET——身份验证和 ASP.NET 模拟内容读取中请稍后...
站内搜索:
win2003 ASP.NET——身份验证和 ASP.NET 模拟
您正浏览win2003 ASP.NET——身份验证和 ASP.NET 模拟的详细内容 首页更多精彩 人气 ...

|奔日网技术学堂欢迎您 tech.8BR.NET|

本节中的示例说明了如何创建集成了各种行业标准安全技术的 ASP.NET 应用程序。有关如何创建使用 Forms 身份验证的示例,请参阅 MSDN Library 中的 Forms 身份验证信息。

同时使用 IIS 身份验证和 ASP.NET 模拟
在此方案中,您将设置 Intranet 网站中的应用程序,以发布雇员信息。但有些信息是管理者专用的。管理者的信息可发布到一般员工信息的子目录中,这样就可以限制对它的访问。该方案还假定:

您使用的是 Microsoft Windows NT 或 Microsoft Windows 2000 server。
硬盘的格式为 NTFS。
Web 服务器是 Internet 信息服务 (IIS) 6.0。
所有要访问的雇员都使用 Windows 平台。
作为管理员的您:

可创建下图所示的文件和目录。


创建一个称作“Managers”的 Windows 组,其中包含了所有有权访问 ManagerInfo.aspx 文件的用户。
使用 IIS 管理工具设置 Windows 身份验证。
将 ASP.NET 配置文件的 <identity> 元素中的 impersonate 属性设置为 true。
将 ManagerInformation 目录的 NTFS 访问控制列表 (ACL) 设置为仅允许 Windows 管理者组中的那些标识访问。请注意,仍需要访问本地系统,这样 ASP.NET 进程本身就可以读取这些文件了。目录中的设置通常类似于以下情况:
如果 Everyone 组有访问权限,请从该组中将其清除。
拒绝匿名用户。
添加具有访问特权的帐户。
授予系统帐号访问权限。
这提供了必要的安全保障,并且无需编写任何代码。


配置 ASP.NET 进程标识
ASP.NET 工作进程 (Aspnet_wp.exe) 应使用不同于 Windows 默认的“系统”身份的享有较少特权的身份运行。这允许进程作为一个相对不受信任的用户来运行,以便使由其主控的 Web 应用程序没有管理特权,且不会损坏服务器的完整性。如果 ASP.NET 工作进程的安全遭到破坏,只会危及相对较弱帐户的安全,入侵者不会拥有对整个服务器的管理访问权限。

要在 Windows 2000 和 Windows Server 中使用 ASP.NET 工作进程自身的帐户运行它,您可将下面的两个属性应用到 <processModel> 配置元素中:

userName
运行进程时使用的帐户名。

password
帐户的明文密码。将明文密码保存在配置文件中会有风险。对于发布到 Internet 上的应用程序,您应该使用其他方法以特定身份运行应用程序,或者将加密凭据存储在注册表中。有关在注册表中存储凭据的详细信息,请参阅 <processModel> 元素。

如下示例显示了如何在配置文件的 <processModel> 节中设置这些属性,以使用本地用户帐户运行工作进程。

<system.web>
    <processModel enable="true"
                  userName="LOCALMACHINE\IUSR_SomeUser"
                  password="password"/>
</system.web>
“系统”和“计算机”是两个预定义的 userName 身份设置。“系统”帐户使用与 Internet 信息服务 (IIS) 本身相同的身份(通常是“系统”)运行工作进程。“计算机”帐户使用的一个特殊的无特权帐户(称为 ASPNET)运行工作进程。两个身份的密码都是 AutoGenerate,这表示进程无需向操作系统提供凭据。

要允许使用特殊的 ASPNET 帐户运行进程,请在 Machine.config 文件中添加下列行。若要更改 Machine.config 中的进程帐户,必须重置 IIS 或停止 Aspnet_wp.exe 进程。

<system.web>
    <processModel enable="true"
                  userName="Machine"
                  password="AutoGenerate"/>
</system.web>
对于 Internet 信息服务第 6 版中启用的新进程模型,ASP.NET 将不使用自身的进程模型。其身份是从 IIS 工作进程中继承来的。

仅当您将相应的帐户权利显式添加到运行工作进程时使用的帐户中时,才能支持下面的示例。将明文密码保存在配置文件中会有风险。对于发布到 Internet 上的应用程序,您应该使用其他方法以特定身份运行应用程序,或者将加密凭据存储在注册表中。有关详细信息,请参阅 <processModel> 元素。

<system.web>
    <identity impersonate="true"
              userName="LOCAL\SomeUser"
              password="password"/>
</system.web>
下列各段介绍的技巧是 ASP 站点的管理员经常使用的技巧,并且在进程身份较弱的 ASP.NET 环境中起作用。

应用程序允许匿名用户进行访问(假定身份验证方案允许匿名用户访问),且匿名用户也配置为应用程序所需的帐户。同时,应用程序还使用基于请求的模拟,并且应用程序代码作为模拟帐户来执行。因为模拟只用于请求处理程序,所以进程帐户仍读取和编译配置。

如果您在使用具有管理员特权的帐户运行工作进程和使用较弱的帐户运行工作进程之间来回替换,则较弱的帐户不能读取用于 Forms 身份验证的本地安全机构 (LSA) 机密,因此所有 Forms 身份验证用户都必须重新进行身份验证。从没有管理特权的帐户到有管理特权的帐户转换时,并不适用。它适用于具有下列配置的应用程序。

<system.web>
    <authentication mode="Forms"/>
    <machineKey validationKey="AutoGenerate"  
                decryptionKey="AutoGenerate"/>
</system.web>

ASP.NET 必需的访问控制列表 (ACL)
下表显示了 ASP.NET 为访问所列出的位置,必须具有的访问权限类型。

位置 访问类型 帐户 注释
installroot\ASP.NET 临时文件 读取/写入 进程或配置的模拟。 这是动态编译的文件的位置。在该位置下,应用程序代码生成就发生在每个应用程序的离散目录中。使用 <compilation> 节的 tempDir 属性可以配置根位置本身。
systemroot\assembly 读取 进程或配置的模拟。 这是全局程序集缓存的位置。
systemroot\system32 读取 进程 包含 .NET Framework 加载的系统 DLL。
systemroot\temp 读取/写入/删除 进程 用于 XML Web 服务支持。
userprofile 目录 读取/写入 进程 由全局程序集缓存锁定文件和公共语言运行库安全配置缓存机制使用。如果帐户的用户配置文件目录不存在,ASP.NET 将使用默认的 userprofile 目录。
application 目录 读取 进程或配置的模拟。 这是应用程序文件的位置。
installroot 层次结构 读取 进程或配置的模拟 ASP.NET 必须能够访问 installroot 下 config 子目录的 Machine.config 文件中所引用的系统程序集。
默认网站监视 读取 进程 用于文件变化的通知监视。



ASP.NET 代码访问安全
使用 ASP.NET 主控多个站点的一个主要好处是公共语言运行库对于代码访问安全的支持,这样可以为服务器应用程序提供执行平台。系统根据代码的来源证据(例如,具有强名称的程序集或者来源的 URL)将其指派到安全区域分类。如果不能对安装在公用服务器上的单个、不相关的应用程序进行安全配置,那么属于某个应用程序的 ASP.NET 页中的代码就可以读取另一个应用程序中的文件(如 Web.config 文件)了。以完全信任方式运行的应用程序仅受其执行时使用的操作系统帐户的约束。

通过强命名操作和向程序集添加策略,可以轻松处理单个程序集的代码访问安全问题。然而,很多 ASP.NET 程序集都是动态页编译过程动态产生的结果,因而没有强名称,所以需要使用其他的程序。

ASP.NET 允许您将对应于预定义权限集的可配置信任级别指派给应用程序。在默认情况下(除非明确地更改配置),应用程序会收到与其提供的证据相当的信任级别。例如,本地应用程序必须在 MyComputer 区域中使用 Full 信任权限集运行,而通用命名约定 (UNC) 共享上的应用程序则必须在 Intranet 区域中使用 LocalIntranet 受限权限集运行。如果想运行信任级别比 Full 低的 Web 应用程序,您必须使用在 ASP.NET 信任级别和策略文件中预定义的某项信任级别来执行部分信任策略。

可以使用下列配置设置替代默认行为,并使应用程序与给定的安全策略相关联。

<location path="MyApp" allowOverride="false">
    <trust level="High"
           originUrl="http://www.contoso.com"/>
</location>
<trust> 配置标记可以应用于计算机级别或分层结构中的任何应用程序根目录。

如果要为整个站点设置策略,您可以通过将站点的根指定为路径位置来实现,方法如下。

<location path="ContosoSite" allowOverride="false">
    <trust level="High"
           originUrl="http://www.contoso.com"/>
</location>
如果不想让程序有能力指定自身的信任级别(在大多数共享服务器安装上的情况),应注意使用 allowOverride 属性来指定 <location> 指令。

下表列出了 <trust> 元素默认支持的属性。

属性 描述 默认支持的值
level 指定应用程序将在其中运行的安全区域。 Full、High、Medium、Low 和 Minimal。
originUrl 允许管理员设置应用程序的原始 URL。
这将允许依赖主机概念的权限正常发挥作用。
标准格式的 HTTP URL。

在默认情况下,与各种安全级别相关的策略享有下表所示的权限。

    级别
权限 Full High Medium Low Minimal
AspNetHostingPermission Full High Medium Low Minimal
环境 未 未 读取:TEMP、TMP、OS、USERNAME、COMPUTERNAME          
FileIO 未 未 读取、写入、追加和查找路径:应用程序目录  读取、查找路径:应用程序目录    
IsolatedStorage 未 未 AssemblyIsolationByUser, 未限制的 UserQuota 1 兆配额(可以为单个站点改变),AssemblyIsolationByUser    
反射 未 ReflectionEmit            
注册表 未                
安全 未 执行、断言、ControlPrincipal、ControlThread、RemotingConfiguration 执行、断言、ControlPrincipal、ControlThread、RemotingConfiguration 执行 执行
套接字 未 未            
WebPermission 未 未 连接到原始主机(如果已配置)。        
DNS 未 未 未        
打印 未 默认打印 默认打印        
OleDBPermission 未                
SqlClientPermission 未 未 AllowBlankPassword=false        
EventLog 未                
消息
队列 未                
服务
控制器 未                
性能
计数器 未                
目录
服务 未                


未 = 未限制的

空白 = 无权限

当某个权限级别可用但并未在安全策略中明确提出时,以 Full 信任级别运行的应用程序将可以使用该级别(因为它们设置了 Full 信任权限集)。以较低的信任级别运行的应用程序不能使用受非显式许可保护的资源,除非您专门更改策略来允许这样做。

如该表所示,High 信任级别的应用程序拥有对应用程序目录中的文件的读取/写入权限,而 Low 信任级别的应用程序仅对应用程序目录中的文件有只读权限。因为 FileIO 权限依赖于物理路径(如 c:\MyAppPath),所以 ASP.NET 在策略文件中使用标记化的语句,该语句在运行时会由相关的路径信息替代。

请注意,WebPermission 允许应用程序连接到原始主机。通过在 <trust> 节上为给定的应用程序提供可选的 OriginUrl 属性,该机制可通过 ASP.NET 起作用。正如下面的 Web_hightrust.config 中的代码所示,OriginUrl 属性可用于替换策略文件中的 $OriginHost$ 变量。

<IPermission class="WebPermission" version="1">
    <ConnectAccess>
        <URI uri="$OriginHost$"/>
    </ConnectAccess>
</IPermission>
SocketPermission 接受主机名或用点分隔的 IP 字符串(也许带有通配符),而 WebPermission 则接受包含协议的正则表达式(如 http://backendmachine/.*)。如果要对此进行更改,您可以更改策略文件以使用所需的权限(或者通过复制默认值创建新的策略文件)。例如,您可以从 ASP.NET 命名权限集中变更 SocketPermission 节,以便允许在 8080 端口上通过 TCP 套接字连接到“backend1”和“backend2”,方法如下。

<IPermission class="SocketPermission" version="1">
    <ConnectAccess>
        <ENDPOINT host="backend1" transport="Tcp" port="8080"/>
        <ENDPOINT host="backend2" transport="Tcp" port="8080"/>
    </ConnectAccess>
</IPermission>

ASP.NET 信任级别和策略文件
信任级别与使用 <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 扩展名,而且系统不会直接使用它。

ASP.NET 策略机制
各种不同信任级别的应用程序域策略由策略级别组成,例如,作为应用程序域策略载入并应用到应用程序域的 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 帮助中的“管理安全策略”主题。
 

 发表对 win2003 ASP.NET——身份验证和 ASP.NET 模拟 的评论  请文明聊天

|点此可收藏|或发表对本篇的评论

声明:此页资源均由网友维护。资源信息、网友评论,不代表本站观点。如有侵权请告知,我们立刻删除。

 艺术写真
 社会新闻
 极品飞车

『热点资讯』

『最新资讯』

『网友推荐』


百度搜索:
会员名称: 密码:匿名 注册 找回密码