扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:51cto 2007年10月14日
关键字:
在本页阅读全文(共2页)
对驻留在 ASP.NET 中的请求进行剖析
远程对象终结点的地址是由以 .rem 或 .soap 扩展文件名结尾的 URL 指定的(例如 http://someserver/vDir/remoteobject.soap)。当 IIS 收到远程对象(带有 .rem 或 .soap 扩展名)的请求时,就会将它(在 IIS 中)映射到 ASP.NET ISAPI 扩展 (Aspnet_isapi.dll) 中。ISAPI 扩展将该请求转发到 ASP.NET 辅助进程 (Aspnet_wp.exe) 中的应用程序域。图 2 显示了事件的顺序。
图 2. 服务器端处理
图 2 显示了以下事件顺序:
1.通过 HTTP 接收 .soap 或 .rem 请求,并将其映射到 Web 服务器上的特定虚拟目录。
2.IIS 检查 .soap/.rem 映射,然后将文件扩展名映射到 ASP.NET ISAPI 扩展 Aspnet_isapi.dll 中。
3.ISAPI 扩展将请求传递给 ASP.NET 辅助进程 (Aspnet_wp.exe) 中的应用程序域。如果这是在该应用程序上发送的第一个请求,则创建一个新的应用程序域。
4.调用 HttpRemotingHandlerFactory 处理程序,然后 remoting 基础结构读取 Web.config 文件中的 <system.runtime.remoting> 部分,它控制服务器端的对象配置(例如,单个调用或单个参数)和授权参数(使用 < authorization> 元素)。
5.Remoting 基础结构查找包含远程对象的程序集并对其进行实例化。
6.Remoting 基础结构读取 HTTP 标头和数据流,然后在远程对象上调用该方法。
注:在此进程中,ASP.NET 调用正常的事件处理程序序列。您可以有选择地在 Global.asax 中实现一个或多个事件处理程序,例如, BeginRequest、AuthenticationRequest、AuthorizeRequest 等等。在请求到达远程对象方法时,将代表已验证用户的 IPrincipal 对象存储在 HttpContext.User (和 Thread.CurrentPrincipal) 中,并且可以将它用于授权。例如,使用用户权限要求和编程角色检查。
ASP.NET 和HTTP 通道
Remoting 没有其自己的安全模型。客户端(代理)和服务器(远程对象)之间的身份验证和授权是通过通道和主机进程执行的。可以组合使用以下的主机和通道:
◆自定义的可执行文件和 TCP 通道。这种组合不提供任何内置的安全功能。
◆ASP.NET 和 HTTP 通道.这种组合通过基本的 ASP.NET 和 IIS 安全功能提供身份验证和授权。
ASP.NET 中驻留的对象可以利用 ASP.NET 和 IIS 的基本安全功能。它们包括:
◆身份验证功能。在 Web.config 中配置 Windows 身份验证功能:
<authentication mode="Windows"/>
IIS 中的设置控制所使用的 HTTP 身份验证类型。
通用的 HTTP 标头用于对请求进行身份验证。可通过配置远程对象代理为客户端提供凭据,也可以使用默认凭据。
不能使用表单或 Passport 身份验证,因为通道没有提供允许客户端访问 Cookies 的方法,而这是这两种身份验证机制的一个要求。另外,表单和 Passport 身份验证需要重定向到要求客户端交互的登录页面。远程的服务器端对象可用于非交互式的场合。
◆授权功能。使用标准的 ASP.NET 授权方法对客户端进行授权。
可配置的授权选项包括:
◆ URL 授权。
◆文件授权(它需要特定的配置。有关说明,请见本章后面的“使用文件授权”)。
编程授权选项包括:
◆用户权限要求(说明性和命令性的)。
◆使用 IPrincipal.IsInRole 进行明确的角色检查。
◆ 安全通信功能。应该使用 SSL(和/或 IPSec)保护客户端和服务器之间数据传输的安全。
.NET Remoting 网关守卫
ASP.NET 驻留的远程对象使用的授权点(或者网关守卫)包括:
◆IIS。如果关闭了匿名身份验证,则 IIS只允许来自特定用户的请求,即它可以在其自己的域或受信任的域中验证这些用户的身份。 IIS 还提供 IP 地址和 DNS 过滤功能。
◆ASP.NET
◆UrlAuthorizationModule。可以配置应用程序 Web.config 中的< authorization> 元素,控制哪些用户和用户组可以访问应用程序。授权是以存储在 HttpContext.User 中的 IPrincipal 对象为基矗
◆FileAuthorizationModule。FileAuthorizationModule 可用于远程组件,但这需要进行特定的配置。有关说明,请参见本章后面的“使用文件授权”。
注要进行文件授权,并不要求使用模拟功能。
FileAuthorizationModule 类只对请求的文件或 URI(例如,.rem 和 .soap)执行访问检查,而不对在远程对象中通过代码访问的文件执行访问检查。
◆用户权限要求和明确的角色检查。除了使用 IIS 和 ASP.NET 可配置的网关守卫外,还可以将用户权限要求(以说明性方式或命令性方式)用作附加的细分访问控制机制。通过使用用户权限检查,您可以根据各个用户的标识和组成员身份(由附加到当前线程的IPrincipal 对象定义)控制对类、方法或个别代码块的访问。
注用于请求角色成员身份的用户权限检查与调用IPrincipal.IsInRole 来测试角色成员身份不同。如果调用者不是指定角色的成员,则前者会出现异常错误,而后者只返回一个布尔值来确认角色成员身份。
利用 Windows 身份验证,ASP.NET 能自动将一个代表已验证身份用户的WindowsPrincipal 对象连接到当前的 Web 请求(使用 HttpContext.User)。
身份验证
在结合使用 Remoting 和 ASP.NET Web 应用程序客户端时,就会在 Web 应用程序和远程对象主机上进行身份验证。远程对象主机可以使用的身份验证选项取决于主机类型。
驻留在 ASP.NET 中
当对象驻留在 ASP.NET 中时,可以使用 HTTP 通道在客户端代理和服务器之间传递方法调用。HTTP 通道使用 HTTP 协议对服务器的远程对象代理进行身份验证。
以下列表说明在 ASP.NET 中驻留对象时可以使用的一组身份验证选项:
◆IIS身份验证选项。匿名、基本、摘要、Windows 集成和证书。
◆ASP.NET 身份验证选项。Windows 身份验证或无(用于自定义的身份验证实现)。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者