首页 / 知识

关于asp.net:从C#Web应用程序中的网络共享访问文件

2023-04-13 07:33:00

关于asp.net:从C#Web应用程序中的网络共享访问文件

Access files from network share in c# web app

我有一个Web应用程序,需要从网络共享读取(并可能写入)文件。我想知道这样做的最好方法是什么?

我无法授予网络服务或aspnet帐户访问网络共享的权限。我可能会使用模拟。

网络共享和Web应用程序都托管在同一个域上,我可以专门为此目的在该域上创建一个新用户,但是我不太确定如何在创建文件流和指定要使用的凭据之间加点在Web应用程序中。

不幸的是,该驱动器未映射为计算机上的网络驱动器,仅作为网络共享供我使用,因此很遗憾,我无法进行透明呼叫。

我可以想到的一个问题是模拟...我只能为每个应用程序域模拟一个用户,但我很高兴得到纠正。我可能需要将此文件写入几个不同的共享,这意味着我可能必须模拟几个用户。

我喜欢创建令牌的想法...如果可以的话,我可以先向用户询问他们的凭据,然后动态应用安全性,如果访问被拒绝,则向他们提供有意义的错误消息...我我要去玩,但我会再给您更新的。


鉴于每个人都已经拥有域帐户。尝试IIS集成身份验证。您会在网络上看到一个难看的登录框,但是您的信誉应该传递到文件共享中。

@lomaxx
您是在说只有共享权限或手动将其映射到驱动器号。如果以后可以使用ucn \ host \ share,则使用与使用c:\?? shared_folder相同的方式。

随机
将共享镜像到主机上的本地文件夹是否会成为负担?我听说ROBOCOPY非常方便。

另一个想法。在目标共享上运行IIS,您可以通过http进行阅读,并且如果需要编写调查web??dav。


如果您可以创建一个新的AD用户,我认为最简单的解决方案是让该应用程序池在该AD帐户的权限下运行,这意味着您的应用程序现在正在以AD用户身份运行。您需要将AD用户添加到运行您的应用程序的计算机上的IIS工作进程组。然后,只要您的AD用户对网络共享具有写权限,您就应该能够在文件操作中使用UNC路径。


您确实有一些选择,其中之一就是您提到的模仿。但是,我过去喜欢并使用过的另一个服务是受信任的服务呼叫。让我们假设一下,限制通过IIS的访问总是更安全的,以确保尽可能少的漏洞。这样,我们就走这条路。

构建具有几个入口点的WCF服务,界面可能看起来像这样。

1
2
3
4
5
6
7
8
public interface IDocumentService
{
    public string BuildTrustedRelationship(string privateKey);

    public byte[] ReadFile(string token, string fileName);

    public void WriteFile(string token, string fileName, byte[] file);
}

现在,您可以非常容易地通过Windows服务托管该服务,因此现在您要做的只是在Application_start上与该服务建立关系以获得令牌,您就可以开始比赛了。这里的另一个好处是,该服务是内部的,受信任的,而且我以前甚至已经将其托管在文件服务器上,因此为该操作授予权限要容易得多。


在这种情况下,模拟对我来说效果很好。我们有一个向导通过网站上传了一个zip文件,但是我们对该网站进行了负载均衡。因此需要设置一种在所有计算机上保存文件的方法。

有很多不同的方法可以做到这一点。我们决定使所有请求都在我们设置的用户下运行,只是添加了web.config条目并在该用户的文件夹上设置了安全权限。这篇kb文章很好地说明了设置。


我毫无问题地透明连接到网络共享,就好像它们是本地驱动器一样。您可能遇到的唯一问题是您提到的问题:拥有aspnet帐户可以访问共享。模仿可能是最好的方法。

只要服务器服务器上有驱动器号,您就应该能够使用任何文件流对象来访问网络共享。


网络应用程序文件方法

最新内容

相关内容

热门文章

推荐文章

标签云

猜你喜欢