
Access files from network share in c# web app我有一个Web应用程序,需要从网络共享读取(并可能写入)文件。我想知道这样做的最好方法是什么? 我无法授予网络服务或aspnet帐户访问网络共享的权限。我可能会使用模拟。 网络共享和Web应用程序都托管在同一个域上,我可以专门为此目的在该域上创建一个新用户,但是我不太确定如何在创建文件流和指定要使用的凭据之间加点在Web应用程序中。 不幸的是,该驱动器未映射为计算机上的网络驱动器,仅作为网络共享供我使用,因此很遗憾,我无法进行透明呼叫。 我可以想到的一个问题是模拟...我只能为每个应用程序域模拟一个用户,但我很高兴得到纠正。我可能需要将此文件写入几个不同的共享,这意味着我可能必须模拟几个用户。 我喜欢创建令牌的想法...如果可以的话,我可以先向用户询问他们的凭据,然后动态应用安全性,如果访问被拒绝,则向他们提供有意义的错误消息...我我要去玩,但我会再给您更新的。 鉴于每个人都已经拥有域帐户。尝试IIS集成身份验证。您会在网络上看到一个难看的登录框,但是您的信誉应该传递到文件共享中。
@lomaxx
随机 另一个想法。在目标共享上运行IIS,您可以通过http进行阅读,并且如果需要编写调查web??dav。 如果您可以创建一个新的AD用户,我认为最简单的解决方案是让该应用程序池在该AD帐户的权限下运行,这意味着您的应用程序现在正在以AD用户身份运行。您需要将AD用户添加到运行您的应用程序的计算机上的IIS工作进程组。然后,只要您的AD用户对网络共享具有写权限,您就应该能够在文件操作中使用UNC路径。 您确实有一些选择,其中之一就是您提到的模仿。但是,我过去喜欢并使用过的另一个服务是受信任的服务呼叫。让我们假设一下,限制通过IIS的访问总是更安全的,以确保尽可能少的漏洞。这样,我们就走这条路。 构建具有几个入口点的WCF服务,界面可能看起来像这样。
现在,您可以非常容易地通过Windows服务托管该服务,因此现在您要做的只是在 在这种情况下,模拟对我来说效果很好。我们有一个向导通过网站上传了一个zip文件,但是我们对该网站进行了负载均衡。因此需要设置一种在所有计算机上保存文件的方法。 有很多不同的方法可以做到这一点。我们决定使所有请求都在我们设置的用户下运行,只是添加了web.config条目并在该用户的文件夹上设置了安全权限。这篇kb文章很好地说明了设置。
我毫无问题地透明连接到网络共享,就好像它们是本地驱动器一样。您可能遇到的唯一问题是您提到的问题:拥有 只要服务器服务器上有驱动器号,您就应该能够使用任何文件流对象来访问网络共享。 |