使用凭据从远程、不受信任的域访问共享文件 (UNC)

问题描述 投票:0回答:1

我们遇到了一个需要解决的有趣情况,但我的搜索结果为零。因此,我向 SO 社区寻求帮助。

问题是这样的:我们需要以编程方式访问不在我们域中的共享文件,并且通过远程文件共享/UNC 不在受信任的外部域中。当然,我们需要向远程计算机提供凭据。

通常,可以通过以下两种方式之一解决此问题:

  1. 将文件共享映射为驱动器并提供当时的凭据。这通常是使用
    NET USE
    命令或复制
    NET USE
    的 Win32 函数来完成。
  2. 使用 UNC 路径访问文件,就像远程计算机位于域中一样,并确保程序运行所用的帐户在远程计算机上以本地用户身份重复(包括密码)。基本上利用这样一个事实:当用户尝试访问共享文件时,Windows 将自动提供当前用户的凭据。
  3. 不要使用远程文件共享。使用 FTP(或其他方式)传输文件,在本地处理该文件,然后将其传回。

由于各种原因,我们的安全/网络架构师拒绝了前两种方法。第二种方法显然是一个安全漏洞;如果远程计算机受到威胁,本地计算机现在也面临风险。第一种方法并不令人满意,因为新安装的驱动器是本地计算机上的其他程序在程序访问文件期间可用的共享资源。尽管这很有可能是暂时的,但在他们看来这仍然是一个漏洞。

他们对第三种选择持开放态度,但远程网络管理员坚持使用 SFTP 而不是 FTPS,而 FtpWebRequest 仅支持 FTPS。 SFTP 是对防火墙更友好的选项,我可以使用几个库来实现这种方法,但如果可以的话,我更愿意减少依赖。 我在 MSDN 中搜索了使用远程文件共享的托管或 win32 方法,但我没有找到任何有用的信息。

所以我问:还有其他方法吗?我是否错过了一个可以实现我想要的功能的超级秘密 win32 函数?或者我必须追求选项 3 的某种变体吗?

c# windows unc file-sharing
1个回答
189
投票
WNetUseConnection

的 Win32 API。 使用此功能通过身份验证连接到 UNC 路径,而不是映射驱动器
这将允许您连接到远程计算机,即使它不在同一域中,即使它具有不同的用户名和密码。

使用 WNetUseConnection 后,您将能够通过 UNC 路径访问该文件,就好像您位于同一域中一样。最好的方法可能是通过内置的管理共享。

示例:\computername
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.