【发布时间】:2020-04-08 20:07:18
【问题描述】:
我有一个在 IIS 上运行的 ASP.NET C# 应用程序。
某些操作需要我使用Directory.EnumerateFiles 读取系统本地放置的文件。这在我调用该函数时有效,因为我的 windows 用户可以访问这些文件,但当另一个用户调用同一页面时它不会。
我检查了WindowsIdentity.GetCurrent().Name,我确实看到CompanyName\MyName 是当前用户。这些文件包含敏感数据,我不希望向所有用户授予读取权限,即使他们在远程系统上。
在我看来,我想专门授予我的 IIS 应用程序读取文件夹的权限,并以某种方式从 IIS 应用程序调用函数 Directory.EnumerateFiles,而不是从执行请求的当前用户(授权已在应用程序本身)。
这是否可行,如果可行,如何实现?
解决方案
我最终使用了这个答案:Can I turn off impersonation just in a couple instances:
using (WindowsIdentity.Impersonate(IntPtr.Zero))
{
//Directory.EnumerateFiles(...)
//File.ReadAllText(...)
}
另外,我授予以下用户访问该文件夹的权限:IIS APPPOOL\MyAppPoolName
【问题讨论】:
-
所以您希望始终使用
ApplicationPoolIdentity阅读文件,对吗? -
文件是否在 Web 服务器的本地文件系统上?如果是这样,您可以授予对 IIS_IUSRS 帐户的读取权限。
-
@HariHaran 是的,这是正确的
-
@AndrewMorton 他们确实是本地文件,我可以试试这个
-
@AndrewMorton 我刚刚测试了这个,但不幸的是它不起作用。不过还是谢谢