【问题标题】:How to allow a .NET Core web app access to network drives?如何允许 .NET Core Web 应用访问网络驱动器?
【发布时间】:2020-11-19 21:46:21
【问题描述】:

我正在实现一个 .NET Core (3.1) Web api,它从网络驱动器读取文件,在其中进行字符串操作,并将它们写到不同的文件夹中(在同一个网络驱动器中)。

目标是通过 HTTP 请求触发该过程。

为此,我创建了我的 web api 项目,部署到 IIS 10 (win10),并且 web 应用程序运行完美。

但是,我在尝试访问网络驱动器时总是遇到权限问题:

System.UnauthorizedAccessException: Access to the path '\\my\network\drive' is denied.
   at System.IO.FileSystem.CreateDirectory(String fullPath, Byte[] securityDescriptor)
   at System.IO.Directory.CreateDirectory(String path)
   ...

我尝试在应用程序池 -> 高级设置 -> 身份下使用所有不同的身份,但没有任何效果。

我从公司的基础架构团队那里听到,对此网络驱动器的授权是在用户级别授予的,因此无法仅授予我的 Web 服务器的计算机帐户访问该驱动器的权限(如果我不是,请道歉在这里使用适当的术语 - 不是网络专家)。

我这几天一直在尝试解决这个问题,但没有任何运气。任何帮助将不胜感激。

TL;DR:

我有一个接收 HTTP 请求的 .NET Core Web 应用程序,当它接收时,它应该读取和写入网络驱动器中存在的文件。但是,抛出 System.UnauthorizedAccessException,阻止我的应用程序访问网络驱动器及其内容。

更新:

不确定这是否有意义,但我的想法是,我不能允许访问我的网络驱动器以组 IIS_IUSRS(应用程序池用户组),因为它是托管我的应用程序的机器中的一个本地组.在这种情况下,也许我需要将该应用程序池配置为作为在我的网络驱动器中具有读/写权限的特定域用户运行。这甚至可能吗?如果是这样,我怎样才能做到这一点?

【问题讨论】:

  • 如果你打开文件资源管理器并粘贴 \\my\network\drive,你看到内容了吗?
  • 您的应用程序池在哪个用户下运行? 要具体。
  • @Delphi.Boy 更重要的是:如果 web 服务器运行的用户帐户 会这样做:it 会看到内容吗?
  • @Delphi.Boy,是的,我可以正常访问驱动器。
  • @mjwills,当我右键单击我的应用程序池并转到高级设置时,身份设置为 LocalSystem。请注意,我使用的是 IIS 10。

标签: c# .net iis .net-core


【解决方案1】:

这是因为您的驱动器设置了访问权限,应用程序无法访问它。

右键单击您的驱动器目录,然后单击“属性”:

点击“编辑”:

我建议给予所有“组或用户名”完全控制权限:

【讨论】:

  • 问题是,就我而言,应用程序池由 IIS_IUSRS 组中的用户运行,并且该组在托管应用程序的机器上是本地的。它不是我可以在我的网络驱动器中设置权限的域组。
  • @Lewis 所以更改应用程序池以在域身份下运行。
  • @mjwills 我认为这正是我必须做的。但是我在 IIS 10 中找不到任何可以帮助我做到这一点的东西。有什么想法吗?
  • 这个答案对于网络文件夹来说不是一个好主意!
  • 您可以尝试将权限授予 NETWORK SERVICE 用户。这个有类似的问题,可以参考这个链接:forums.asp.net/t/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-30
  • 1970-01-01
  • 1970-01-01
  • 2017-07-02
  • 1970-01-01
相关资源
最近更新 更多