使用登录用户的权限在网络驱动器上进行 asp.net 文件 IO

Posted

技术标签:

【中文标题】使用登录用户的权限在网络驱动器上进行 asp.net 文件 IO【英文标题】:asp.net file IO on network drive using logged in user's permissions 【发布时间】:2018-01-05 02:11:03 【问题描述】:

我在我们公司的 Intranet 上运行了一个 asp.net 4.0 Web 应用程序。它正在使用 Windows 身份验证。它需要对网络驱动器上的文件进行一些文件 IO 操作。我收到权限错误,因为 IIS 应用程序池帐户显然无权访问这些文件。

如果我将 <identity impersonate="true /> 添加到 web.config 文件中,我会收到同样的错误。

如果我添加<identity impersonate="true" username="myname" password="..."> 到 web.config 文件,然后如果我可以访问相关文件的情况下,该应用程序可以工作 - 但我需要其他人能够使用它来处理 他们的 部门网络上的文件分享。

安全人员绝不会让我为 IIS 默认帐户或此服务器上的新批处理管理员授予全面权限,以拥有整个网络的权限(这是正确的)。用户应该只能在他们已经有权访问的文件上运行此应用。

如何让应用以登录用户身份运行文件 IO 进程?

【问题讨论】:

我想我想要委派而不仅仅是模仿,但我找不到比 ASP.NET 2.0/IIS 5 更新的东西?? 【参考方案1】:

您需要的是Impersonation,默认情况下它是禁用的。要启用Impersonation,请将以下配置放入您的 web.config

<configuration>
  <system.web>
    <identity impersonate="true"/>
  </system.web>
</configuration>

要了解有关ASP.NET Impersonation 的更多信息,请查看here

【讨论】:

如果我使用身份模拟来专门使用我的帐户,它可以工作。如果我只使用 identity impersonate=true 而不指定帐户,我仍然会收到错误 - 所以它显然没有传递我的凭据。 根据那个文档:“也就是说,如果你为被冒充的用户指定用户名和密码,你可以连接到网络上的另一台计算机并请求资源,例如文件或访问 SQL服务器,使用集成安全。如果您启用模拟并且没有指定域帐户作为身份,您将无法连接到网络上的另一台计算机,除非您的 IIS 应用程序配置为使用基本身份验证。"这是否意味着没有办法做我需要的事情?【参考方案2】:

所以我所做的是创建一个登录页面并让用户重新输入他们的凭据,然后按照此处的说明创建 Windows 身份令牌并在代码隐藏中模拟它:Impersonate user in codebehind

我不知道是否有更好的解决方案,但它确实有效。

【讨论】:

以上是关于使用登录用户的权限在网络驱动器上进行 asp.net 文件 IO的主要内容,如果未能解决你的问题,请参考以下文章

域用户共享文件夹映射网络驱动器

如何:使用 Parse 在 Xamarin.Android 应用程序上进行 Facebook 单点登录 (SSO)?

急!!!电脑无法映射网络驱动器

使用 OneLogin 和 DotNetOpenAuth 在 CrossDomain 上进行 ASP.Net 单点登录

命令行应用程序中的 asp.net 4.0 到 excel 2010 不起作用 - 即使在驱动程序安装后也找不到驱动程序

ASP.NET Web API 身份验证(Web + 移动)