📄 。net安全性.txt
字号:
PrincipalPermission permCheck = new PrincipalPermission(
null, @"DomainName\WindowsGroup");
permCheck.Demand();
? 声明方式(属性位于接口、类和方法之前)
[PrincipalPermission(SecurityAction.Demand,
Role=@"DomainName\WindowsGroup)]
? 明确的角色检查。您可以使用 IPrincipal 接口执行角色检查。
IPrincipal.IsInRole(@"DomainName\WindowsGroup");
? 企业服务 (COM+) 角色。您可以使用 ContextUtil 类以编程方式执行角色检查。
ContextUtil.IsCallerInRole("Manager")
何时使用
使用 Windows 身份验证和模拟的情况:
? 应用程序的用户已经有了可以由服务器进行身份验证的 Windows 帐户。
? 您需要将原调用方的安全性上下文传递到 Web 应用程序的中间层和/或数据层以支持细分(每用户)授权。
? 您需要将原调用方的安全性上下文传递到下游各层以支持操作系统级审核。
在应用程序中使用模拟之前,确保将此方法与使用受信任的子系统模型进行比较,了解此方法的优缺点。第 3 章身份验证和授权的授权方法部分的“选择资源访问模型”中详细阐述了这些内容。
模拟的缺点包括:
? 由于无法有效地对数据库连接进行池处理,因而降低了应用程序的可伸缩性。
? 由于需要给各个用户配置后端资源的 ACL,因而增加了管理工作。
? 委派需要 Kerberos 身份验证和进行适当配置的环境。
更多信息
? 有关 Windows 身份验证的详细信息,请参见本章后面的 Windows 安全性。
? 有关模拟的详细信息,请参见本章后面的模拟。
? 有关 URL 授权的详细信息,请参见本章后面的 URL 授权注意事项。
? 有关企业服务 (COM+) 角色的详细信息,请参见第 9 章企业服务安全性。
不带模拟功能的 Windows 身份验证
以下配置元素显示了如何在 Web.config 中明确声明启用不带模拟功能的 Windows (IIS) 身份验证。
<authentication mode="Windows" />
<!-- 以下设置等价于没有标识元素 -->
<identity impersonate="false" />
可配置的安全性
当您使用不带模拟功能的 Windows 身份验证时,可以使用下列授权选项:
? Windows ACL
? 客户端请求的资源。ASP.NET FileAuthorizationModule 对映射到 ASP.NET ISAPI 的请求文件类型执行访问检查。它使用原调用方的访问令牌和附加到请求的资源的 ACL,以便执行访问检查。模拟不是必需选项。
对于静态文件类型(没有映射到 ISAPI 扩展),IIS 使用调用方的访问令牌和附加到文件的 ACL 执行访问检查。
? 应用程序访问的资源。根据 ASP.NET 进程标识,在应用程序所访问的资源(文件、文件夹、注册表项和 Active Directory 对象)上配置 Windows ACL。
? URL 授权。在 Web.config 中配置 URL 授权。在 Windows 身份验证中,用户名采用 DomainName\UserName 的形式,并且角色与 Windows 组一一对应。
<authorization>
<deny user="DomainName\UserName" />
<allow roles="DomainName\WindowsGroup" />
</authorization>
编程安全性
可以使用下列编程安全性选项:
? 主体权限要求
? 强制方式
PrincipalPermission permCheck = new PrincipalPermission(
null, @"DomainName\WindowsGroup");
permCheck.Demand();
? 声明方式
[PrincipalPermission(SecurityAction.Demand,
Role=@"DomainName\WindowsGroup")]
? 明确的角色检查。您可以使用 IPrincipal 接口执行角色检查。
IPrincipal.IsInRole(@"DomainName\WindowsGroup");
何时使用
使用不带模拟功能的 Windows 身份验证的情况:
? 应用程序的用户已经有了可以由服务器进行身份验证的 Windows 帐户。
? 需要使用固定标识来访问下游资源(例如数据库),以便支持连接池。
更多信息
? 有关 Windows 身份验证的详细信息,请参见本章后面的 Windows 安全性。
? 有关 URL 授权的详细信息,请参见本章后面的 URL 授权注意事项。
使用固定标识的 Windows 身份验证
Web.config 中的 <identity> 元素支持可选的用户名和密码属性,这样,您就可以为应用程序配置特定的固定标识以进行模拟。这显示在以下配置文件片段中:
<identity impersonate="true"
userName="registry:HKLM\SOFTWARE\YourSecureApp\
identity\ASPNET_SETREG,userName"
password="registry:HKLM\SOFTWARE\YourSecureApp\
identity\ASPNET_SETREG,password" />
此示例显示 <identity> 元素,其中在注册表中使用 aspnet_setreg.exe 实用程序加密凭据。明文形式的 userName 和 password 属性值已被指向安全注册表项的指针和包含加密凭据的已命名值替代。有关此实用程序和下载它的详细信息,请参见 Microsoft 知识库文章 Q329290 HOWTO: Use the ASP.NET Utility to Encrypt Credentials and Session State Connection Strings(HOW TO:使用 ASP.NET 工具加密凭据和会话状态连接字符串)。
何时使用
在 Windows 2000 服务器上使用 .NET Framework 1.0 时,建议不要使用固定模拟标识。这是因为您需要授予 ASP.NET 进程帐户“作为操作系统的一部分”的高特权。ASP.NET 进程需要此特权,因为它使用您提供的凭据执行 LogonUser 调用。
注意:.NET Framework 1.1 版会在 Windows 2000 上提供这个方案的增强功能。登录将由 IIS 进程执行,这样一来,ASP.NET 就不需要“作为操作系统的一部分”特权。
窗体身份验证
以下配置元素显示了如何在 Web.config 中以声明方式启用窗体身份验证。
<authentication mode="Forms">
<forms loginUrl="logon.aspx" name="AuthCookie" timeout="60" path="/">
</forms>
</authentication>
可配置的安全性
在使用窗体身份验证时,可以使用下列授权选项:
? Windows ACL
? 客户端请求的资源。请求的资源需要 ACL 允许对匿名 Internet 用户帐户进行读访问。(在使用窗体身份验证时,应该将 IIS 配置为允许匿名访问)。
无法使用 ASP.NET 文件授权,因为它需要 Windows 身份验证。
? 应用程序访问的资源。根据 ASP.NET 进程标识,在应用程序所访问的资源(文件、文件夹、注册表项和 Active Directory 对象)上配置 Windows ACL。
? URL 授权
在 Web.config 中配置 URL 授权。在窗体身份验证中,用户名的格式取决于自定义数据存储、SQL Server 数据库或 Active Directory。
? 如果使用的是 SQL Server 数据存储:
<authorization>
<deny users="?" />
<allow users="Mary,Bob,Joe" roles="Manager,Sales" />
</authorization>
? 如果使用 Active Directory 作为数据存储,则以 X.500 格式显示用户名和组名:
<authorization>
<deny users="someAccount@domain.corp.yourCompany.com" />
<allow roles ="CN=Smith James,CN=FTE_northamerica,CN=Users,
DC=domain,DC=corp,DC=yourCompany,DC=com" />
</authorization>
编程安全性
可以使用下列编程安全性选项:
? 主体权限要求
? 强制方式
PrincipalPermission permCheck = new PrincipalPermission(
null, "Manager");
permCheck.Demand();
? 声明方式
[PrincipalPermission(SecurityAction.Demand,
Role="Manager")]
? 明确的角色检查。您可以使用 IPrincipal 接口执行角色检查。
IPrincipal.IsInRole("Manager");
何时使用
窗体身份验证最适合于 Internet 应用程序。如果出现以下情况,则应该使用窗体身份验证:
? 应用程序用户没有 Windows 帐户。
? 您希望用户通过使用 HTML 窗体输入凭据的方式登录到应用程序。
更多信息
? 有关窗体身份验证的详细信息,请参见本章后面的窗体安全性。
? 有关 URL 授权的详细信息,请参见本章后面的 URL 授权注意事项。
Passport 身份验证
以下配置元素显示了如何在 Web.config 中以声明方式启用 Passport 身份验证。
<authentication mode="Passport" />
何时使用
如果应用程序用户没有 Windows 帐户,并且您希望实现单次登录解决方案,则应该在 Internet 上使用 Passport 身份验证。如果用户以前使用 Passport 帐户在参与的 Passport 站点进行登录,则不必登录到使用 Passport 身份验证配置的站点。
返回页首
配置安全性
本节说明配置 ASP.NET Web 应用程序安全性所需的实际步骤。图 8.3 中总结了这些情况。
图 8.3
配置 ASP.NET 应用程序安全性
配置 IIS 设置
若要配置 IIS 安全性,您必须执行以下步骤:
1.
(可选)安装 Web 服务器证书(如果需要 SSL)。
有关详细信息,请参见本指南中的如何在 Web 服务器上设置 SSL。
2.
配置 IIS 身份验证。
3.
(可选)配置客户端证书映射(如果使用证书身份验证)。
有关客户端证书映射的详细信息,请参见 Microsoft 知识库文章 Q313070 How To: Configure Client Certificate Mappings in Internet Information Services (IIS) 5.0(如何在 Internet 信息服务 (IIS) 5.0 中配置客户端证书映射)。
4.
设置文件和文件夹的 NTFS 权限。IIS 和 ASP.NET FileAuthorizationModule 共同检查已进行身份验证的用户(或匿名 Internet 用户帐户)是否具有访问所请求文件的必要访问权限(根据 ACL 设置)。
配置 ASP.NET 设置
应用程序级别配置设置保存在 Web.config 文件中,这些文件位于应用程序的虚拟根目录或者(可选)其他子文件夹中(这些设置有时可以取代父文件夹设置)。
1.
配置身份验证。应该在应用程序虚拟根目录下的 Web.config 文件中基于每个应用程序对它进行设置(而不是在 Machine.config 中)。
<authentication mode="Windows|Forms|Passport|None" />
2.
配置模拟。默认情况下,ASP.NET 应用程序不使用模拟。应用程序使用配置的 ASP.NET 进程标识(通常为 ASPNET)运行,并且应用程序执行的所有资源访问都使用此标识。仅在以下情况下需要使用模拟:
? 您使用企业服务并且要使用企业服务 (COM+) 角色授权访问服务组件所提供的功能。
? 将 IIS 配置为使用匿名身份验证,而且要使用匿名 Internet 用户帐户进行资源访问。有关此方法的详细信息,请参见本章后面的访问网络资源。
? 您需要将已进行身份验证的用户的安全性上下文传递到下一层(例如数据库)。
? 您已将传统的 ASP 应用程序移植到 ASP.NET,并且需要同样的模拟行为。默认情况下,传统 ASP 模拟调用方。
若要配置 ASP.NET 模拟,请在应用程序的 Web.config 中使用下面的 <identity> 元素。
<identity impersonate="true" />
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -