6
|
Dylan Beattie · 技术社区 · 15 年前 |
![]() |
1
4
你的问题很清楚。在当前的实现中,您只有模拟用户,没有委派。我不想重复斯蒂芬·马丁已经写的信息。我只想添加至少三个解决方案。史蒂芬·马丁建议的代表团的经典方式只是一种方式。您可以在这里阅读更多方法: http://msdn.microsoft.com/en-us/library/ff647404.aspx#paght000023_delegation . 我看到你解决问题的三种实际方法:
重要的是要知道您在运行IIS的服务器上拥有的Windows服务器版本以及您在Active Directory中拥有的域功能级别(如果选择域并选择“提升域功能级别”,请在“Active Directory域和信任”工具中看到这一点)。了解IIS的应用程序池在哪个帐户下运行也很有趣。 第一种和第三种方法总是有效的。第三种方法可能对您的环境和文件系统中的当前权限有害。第二个非常优雅。它允许控制从IIS访问哪些服务器(文件服务器)。这种方式有一些限制,需要在Active Directory中完成一些工作。 因为您使用经典的ASP,所以必须创建一个小的可脚本化软件组件来支持您的实现。 你喜欢哪种方式? 更新的 基于注释中的问题:因为您使用的是经典的ASP,所以不能直接使用win32 API,但是您可以在vb6或.NET中编写一个小的COM组件,该组件使用您需要的API。例如,您可以使用 http://support.microsoft.com/kb/248187/en . 但是你应该在里面做些别的事情。因此,我现在解释哪些win32 API可以帮助您使用令牌和模拟完成所需的一切工作。
首先是一个关于模仿的小解释。一切都很简单。进程运行时始终有一个主令牌。对于任何线程,都可以分配另一个令牌(线程令牌)。要做到这一点,需要有一个用户的令牌
要返回到原始进程令牌(仅限当前线程),可以调用
更新的
2:可能是使用
在“类库”类型的c中创建一个名为
在“build”部分“register for com interop”中签入项目属性。在项目的“签名”部分,检查对程序集签名,并在“选择强名称密钥文件”中选择
编译此项目后,您将得到两个文件:loginadmin.dll和loginadmin.tlb。DLL已在当前计算机上注册。如果在另一台计算机上注册,请使用 Reasas.EXE . 要在ASP页上测试此COM DLL,可以执行以下操作
如果用于运行IIS应用程序池的帐户可以访问相应的网络共享,则输出如下所示
|
![]() |
2
4
在“模拟”下,只能访问本地计算机上的安全资源,不能通过网络访问任何内容。 在Windows上,当您以模拟用户身份运行时,您使用的是所谓的网络令牌。此令牌具有用于本地计算机访问的用户凭据,但没有用于远程访问的凭据。因此,当您访问网络共享时,实际上是以匿名用户的身份访问它。 当您在桌面上运行一个进程(如cscript.exe)时,您将在一个交互式用户令牌下运行。此令牌具有本地和远程访问的完整凭据,因此您可以访问网络共享。 为了在模拟Windows用户时访问远程资源,必须使用委派,而不是模拟。这将涉及对Active Directory的一些更改,以允许为计算机和/或域中的用户进行委派。这可能是一个安全风险,因此应该仔细审查。 |