日期:2014-03-24 浏览次数:20407 次
有几种方法可以用来访问网络资源:
·使用ASP.NET进程身份
·使用匿名用户帐户
·使用LogonUser API
·使用服务性的组件(企业服务)
使用ASP.NET进程身份似乎有很明显的缺陷。缺省情况下,当应用程序试着访问资源时,ASP.NET进程身份提供一个身份(ASPNET)。最简单的解决方案是创建一个具有与远程计算机上相匹配的用户名和密码的本地帐户。大多数企业都会有庞大的内联网,因此这一方法是不切实际的。另外,知道是谁在访问资源也是非常重要的。尽管该方法足以访问网络资源,但效率不够高;第二个方法是使用匿名帐户,例如IUSR_MACHINE。与上面的原因相同,这种方法的效率显然也不高;第三种方法是使用LogonUser API,这种方法要求通过调用Win32 LogonUser API模仿一个特定的身份,还可以通过配置ASP.NET项目web.config文件中的<identity>元素进行模仿。据MSDN上的一篇文章称,不建议用户使用以上这些方法,应当避免在Windows 2000服务器上使用它们,因为它们要求向ASP.NET帐户进程授予“作为操作系统一部分运行”的权限,从而极大地降低了web应用程序的安全性。因此,该方法也不理想。最后,也是最可行的解决该问题的方法是使用配置为作为用于访问网络资源固定身份运行的服务性组件。这种方法听起来令人胆怯,但它是目前最好的解决方案,它的架构如下图所示:
梅耶在http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetsec/html/SecNetch08.asp上发表的一一篇有关安全的文章中表示,在企业服务服务器应用程序中使用服务性组件有以下好处:
·在使用的身份方面的灵活性,不必只依赖于ASP.NET身份。
·受信任或权限较高的代码能够与主web应用程序隔离。
·增加的进程跃距提高了攻击难度,它使得黑客更难跨越进程的边界,使用具有较高权限的进程。
·如果需要手动处理LogonUser API调用的模仿,我们可以在一个与主Web应用程序隔离的进程中完成这一工作。
开发服务性组件
从COM+中接受服务的组合体被称作服务性组件。为了开发服务性组件,开发人员必须具备丰富的COM+技术经验。COM+应用程序不是传统意义上的应用程序,它不包含用户界面。COM+应用程序实际上是构成应用程序的组件、COM和.NET的容器,它不是新版的COM,也不是COM和DCOM的组合,而是遗传自MTS(微软事务服务)的一种技术。
下面是开发服务性组件所需要的步骤:
1、创建一个新类库项目,以开发作为Web应用程序类库的中间层组件。
2、添加合适的类、方法和属性。由于需要访问文件和文件夹,我们需要引入System.IO名字空间。
3、创建一个Web窗体应用程序。
现在就可以对组件进行测试了。为了在企业服务应用程序中实现较高的安全性,必须使用Windows认证实现模仿,这一工作可以在Web应用程序的web.config文件中实现。它使得服务性组件能够认证调用者,并根据调用者的身份作出授权决策。在开发期间,尽管组件还不是服务性组件,它仍然能够为访问共享文件和文件夹提供足够的安全性。
<authentication mode="Window" />
<identity impersonate="true" />
要进行测试,需要首先对类进行编译,然后将对象的引用添加到Web应用程序中。对类进行如下所示的初始化:
Dim objEnterprise As New AccessingSharedResources.dal_AccessNetwork()
4、创建强命名组合体
·通过依次选择Start Menu --> Programs --> Microsoft Visual Studio .NET --> Visual Studio .NET Tools --> Visual Studio .NET Command Prompt运行Visual Studio .NET Command Prompt。
·找到项目所在的目录,并输入下面的命令:sn -k KeyPair.snk。
·上面的命令会创建一个公/私钥对,Visual Studio .NET IDE可以用它们给我们的组件一个强命名。另外需要注意的是,在项目目录中创建了一个KeyPair.snk文件。
·打开AssemblyInfo.vb文件代码窗口,并添加下面的Assembly属性:
<Assembly: AssemblyKeyFile("KeyPair.snk")>
·编译该项目。这将创建强命名的组合体。
5. Add the object to the GAC (Global Assembly Cache)
6、在GAC(全局组合体缓冲区)中添加对象
·通过点击Start Menu --> Programs --> Administrative Tools --> Microsoft .NET Framework Configuration打开.NET框架配置工具。
·点击Select Assembly Cache --> Select View List of Assemblies in the Assembly Cache浏览GAC中所有的组合体。
·右击Assembly Cache图标,从弹出菜单中选择Add。
·找到该项目的bin目录中的Accessin