我有一个在IIS上运行的ASP.NET C#应用程序。
某些操作需要我使用 `Directory.EnumerateFiles` 读取放置在本地系统上的文件。当我调用该函数时,它可以工作,因为我的Windows用户可以访问那些文件,但是当另一个用户调用相同的页面时,它就无法工作了。
我使用 `WindowsIdentity.GetCurrent().Name` 进行了检查,并且确实看到当前用户是 `CompanyName\MyName`。这些文件包含敏感数据,我不希望将读取权限赋予所有用户,即使它们位于远程系统上。
在我看来,我想要特别授予我的IIS应用程序从文件夹读取的权限,并且以一种方式调用 `Directory.EnumerateFiles`,从而不是从执行请求的当前用户(授权已经在应用程序中处理)。
这是可行的吗?如果是,则如何实现?
解决方案:
最终,我使用了这个答案:Can I turn off impersonation just in a couple instances:
某些操作需要我使用 `Directory.EnumerateFiles` 读取放置在本地系统上的文件。当我调用该函数时,它可以工作,因为我的Windows用户可以访问那些文件,但是当另一个用户调用相同的页面时,它就无法工作了。
我使用 `WindowsIdentity.GetCurrent().Name` 进行了检查,并且确实看到当前用户是 `CompanyName\MyName`。这些文件包含敏感数据,我不希望将读取权限赋予所有用户,即使它们位于远程系统上。
在我看来,我想要特别授予我的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