System.UnauthorizedAccessException 从 W3WP 执行 DirectoryInfo().GetFiles() 时 - 为什么?

System.UnauthorizedAccessException when executing DirectoryInfo().GetFiles() from W3WP - Why?

我正在 运行 设置一个 ASP.NET 网络表单,它试图使用 new DirectoryInfo(path).GetFiles(pattern) 获取共享文件夹的内容。应用程序池设置为具有域用户名的 运行,但在执行时它冒充了我的用户名。我所在的组对树中的所有文件夹具有 完全控制 访问权限,并且对共享具有 完全控制 访问权限。此外,我还提供了 Everyone ReadRead & ExecuteList folder contents访问文件夹树和 读取和执行 共享。

然而,当语句被执行时,我得到一个 System.UnauthorizedAccessException:'Access to the path '\server\share\sub1\sub2' is denied.

运行 SysInternals' Process Monitor,事件显示:

Desired Access: Read Data/List Directory, Synchronize
Disposition:    Open
Options:        Directory, Synchronous IO Non-Alert, Open For Backup
Attributes:     n/a
ShareMode:      Read, Write Delete
AllocationSize: n/a
Impersonating:  <MyUsername>

运行 在同一台服务器上的命令 window,在获取文件夹的目录列表或访问文件夹中的任何文件时我都没有错误。

我错过了什么?

为什么在 Process Monitor 中查看响应 ACCESS DENIED 并且操作给出为 CreateFile?

缺少 Everyone 完全控制(我认为这不会有帮助)我想不出更多的权限来授予。

注意,我也试过 Directory.EnumerateFiles(path, pattern) 结果相同。

更新:

网站上的身份验证是Windows AuthenticationASP.NET impersonation;匿名访问被禁用。特定页面不会覆盖它。

您得到的结果不同,因为您的权限与您的应用程序在 IIS 中的帐户 运行 的权限不同。

检查作为您的 IIS 站点的 运行 应用程序池的帐户,并确保该帐户可以访问您尝试访问的 UNC 路径。

您似乎遇到了 "double-hop" 问题。

当你验证到IIS服务器时是第一个'hop'.
当 IIS 尝试访问 UNC 时,是不允许的第二跳。

IIS 无法依次将您的凭据传递给 UNC。

有关详细信息,请参阅本文

UNC Path Access Denied error

Double Hop Problem