10

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

我无法让网络服务或 aspnet 帐户访问网络共享。我可能会使用模仿。

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


不幸的是,该驱动器没有映射为机器上的网络驱动器,它只能作为网络共享提供给我,所以很遗憾我无法进行透明调用。

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

我喜欢创建令牌的想法......如果我能做到,我将能够预先询问他们的凭据,然后动态应用安全性并在访问被拒绝时给他们有意义的错误消息......我我要去玩,但我会回来更新。

4

5 回答 5

3

鉴于每个人都已经拥有域帐户。尝试 IIS 集成身份验证。您将在网络上获得一个丑陋的登录框,但您的凭据应该传递给文件共享。

@lomaxx
您是说只有您拥有共享权限还是您手动将其映射到驱动器号。如果是后者,您可以像使用 ac:\shared_folder 一样使用 ucn\host\share。

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

另一个想法。在您的目标共享上运行 IIS,您可以通过 http 读取,如果您需要编写调查 webdav。

于 2008-08-27T01:59:39.010 回答
0

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

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

于 2008-08-27T01:54:13.033 回答
0

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

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

于 2008-08-27T01:56:45.337 回答
0

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

构建一个有几个入口点的 WCF 服务,界面可能如下所示。

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建立与该服务的关系以获取您的令牌,然后您就可以参加比赛了。这里的另一个好处是该服务是内部的、受信任的,而且我之前什至将它托管在文件服务器上,因此授予此操作的权限要容易得多。

于 2012-08-10T11:10:20.553 回答
0

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

于 2012-08-10T12:29:41.407 回答