我有一个端点可以访问带有一些图像的远程文件夹(UNC 路径)。在本地,我已经能够做到这一点并获取图像,但是如果 Web Api 发布在 IIS 中,则返回结果表明我的凭据不正确。
我能够在Web Forms应用程序中使用DllImport和模拟管理员来解决这个问题,但是实现不同,并且它们位于不同的计算机中,即使远程文件夹是相同的。
我无法使用NetworkCredential 和 WindowsIdentity.RunImpersonated 在 Web Api 项目中复制解决方案。
我基本上是这样做的,没有凭据部分:
byte[] imageBytes = System.IO.File.ReadAllBytes(uncPath);
return File(imageBytes, "image/png");
两个 IIS 都已配置了用户和访问权限,除非我遗漏了某些内容。提前致谢。
// HARDCODING FOR DEMO ONLY - Use either Azure Key Vault or some other secret manager
var sourceCredentials =
new NetworkCredential { Domain = "domain", UserName = "user", Password = "pass" };
using (new NetworkConnection("\\\\Network\\Shared", sourceCredentials))
{
// to serve static froms from \\network\shared location
app.UseStaticFiles(new StaticFileOptions()
{
FileProvider = new PhysicalFileProvider(
Path.Combine("\\\\Network\\Shared"))
});
}
该方法使用自定义的 NetworkConnection 类来模拟网络连接,并在静态文件中间件中使用该连接。该方法的目的是在应用程序启动时使用指定的凭据建立与共享网络路径的连接,以便应用程序在启动过程中可以访问共享文件夹中的静态文件。 需要注意的是,此方法中的凭据以明文形式硬编码在代码中。这在实际生产环境中是不安全的。在生产环境中,您应该将这些凭据保存在某个安全位置(例如密钥保管库)。
参考链接: