【问题标题】:Create a folder on NTFS server using C# web api使用 C# web api 在 NTFS 服务器上创建一个文件夹
【发布时间】:2018-09-11 21:57:51
【问题描述】:

我正在实现一个应用程序,它将在 NTFS 文件服务器上创建一个文件夹。 为此,我已经设置了分布式环境。意思是,我有一台托管 C# Web API 的机器,并且我有 NTFS 文件服务器,我必须在其上创建文件夹。

我希望我的 API 在 NTFS 机器上创建一个文件夹。我怎样才能做到这一点? 我是否需要共享 NTFS 驱动器/文件夹才能创建子文件夹?如果是这样,那么我需要与谁共享 NTFS 文件夹(服务器用户或 IIS_USRS)?

有没有其他方法可以在不共享 NTFS 文件夹上的驱动器/文件夹的情况下创建文件夹。

【问题讨论】:

  • 所有 Windows 机器都是“NTFS 机器”。 NTFS 是 Windows 使用的文件系统。您正在询问如何创建共享文件夹。首先,这已经可以通过 WinRM、Powershell 和许多其他内置于 Windows 的远程管理 API 获得。您无需为此创建额外的网络应用程序。
  • 为什么要从 Web 应用程序创建共享文件夹?在部署期间使用脚本或策略执行此操作要安全得多

标签: c# asp.net asp.net-web-api ntfs unc


【解决方案1】:

当我过去这样做时,我是通过临时模仿来完成的。比如……

using (Impersonator impersonate = new Impersonator(@"UserName", "Password", "Domain")) 
{
     //Create directory or copy files across the network
}

我相信我从A small C# Class for impersonating a User 中提取了我的模仿代码

【讨论】:

  • 感谢@peter.edwards 的回复。我使用了模拟,但我无法使用我的本地计算机用户连接它。我能够将它与其他域用户连接起来。但我无法将它与我的本地帐户关联。
【解决方案2】:

案例一:

如果网页服务器和文件服务器在同一个域中,可以考虑使用域用户,并在NTFS服务器上创建共享文件夹,并授予访问它的域用户完全访问权限。 (取决于您的要求)。

在 Web 服务器上,对于 Web 应用程序池,将域用户设置为身份/凭据以运行池。因此,如果密码被更改,您可以轻松地使用 IIS 管理工具对其进行更新。对于身份验证,您可以根据要求使用任何您想要的,但请记住,当您调用代码在 NTFS 服务器上创建文件夹时,您需要使用应用程序池用户。 (例如,如果您在身份验证中打开了对不同用户的模拟,则在您的代码中,您需要使用池用户进行模拟。)

案例 2, web服务器和文件服务器不在同一个域,我通常会在文件服务器上设置一个ftp服务器,允许特定用户访问(创建文件夹和上传文件....)。否则当您可能需要您的 IT 管理员让文件服务器域信任 Web 服务器域时,您可以执行与案例 1 相同的操作。

关于模拟代码,可能是这样的:

    //get the identity of an appPool 
         using(System.Security.Principal.WindowsIdentity wid = System.Security.Principal.WindowsIdentity.GetCurrent())
         {
             using (System.Security.Principal.WindowsImpersonationContext ImpersonationCtx = wid.Impersonate())
             {
                 //creating folders, uploading files to UNC path... 

                 ImpersonationCtx.Undo();
             }
         }

如果您的情况属于其中之一,希望对您有所帮助。

【讨论】:

  • 嗨@Victor,我正在使用模拟。我所做的是,来自同一域的用户能够模拟,但是当我试图从我的另一台机器模拟本地用户时,它不起作用。记下该用户来自管理组。
  • 嗨@AnkitPrajapati,只是为了确保您设置API 使用模拟身份验证并使用API​​ 本地管理员帐户,但未能在NTFS 机器上创建文件夹?如果是这样,您是否在 NTFS 机器上创建了相同的本地帐户?
  • 是的,我就是这么做的。我在 NTFS 机器上创建了一个本地帐户,并使用该用户实施模拟。
  • 通常我会在 NTFS 机器上为这个案例设置一个 ftp 服务器。回到您的案例,您是否查看了有关 UAC 的 MS KB 文章 951916。该策略可能会拒绝来自使用本地凭据的远程计算机的访问。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-08
  • 2013-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多