在ASP.NET中访问远程资源的问题

近期的一个项目是对文档进行管理的,程序通过UNC Path访问远程服务器的Shared Folder上传或者读取文档。
开发阶段我们一般都使用VS.NET自带的服务器调试,而这个服务器是以当前登录用户的身份运行的,也就是说如果我们事先访问过相应的Shared Folder可能就会保留了相应的授权,程序因此可以顺利的访问它里面的文件。但是如果将项目部署到IIS情况则发生了变化,程序没有了访问远程的 Shared Folder的权限。为了解决这个问题,我们最初使用了一个方案,即启用Guest帐户并且在相应的Shared Folder上给予Guest读取和写入权限。但这样的方式安全性可想而之,任何用户都可以修改本应由程序管理的文档。
为了解决这个问题,这两天又研究了一下。其实方法很简单。
首先文件服务器和Web服务器必须在域中。
默认情况下IIS以machine\ASPNET帐户的身份运行,我们在web.config中定义
<identity impersonate="true" username="Domain\UserName" password="pword" />这样可以让IIS以此指定的域帐户身份执行。另外可能需要给予此域帐户ASP.NET临时文件夹的写入权限。
下面的操作可想而之,在FileServer上相应的文件夹上给予这个域帐户读取和写入权限。完成。

这东西没什么技术含量,但是算是一个小技巧吧。有不正确的地方欢迎提出。

2 评论:

Prisca 说...

突然想起来还有篇BLOG没回复,恩。。。又看了一遍,没太明白你到底是想让谁有权限读写。如果是特定的某个人呢,ASP.NET 2.0不是有什么身份认证么,服务器上建个相同名字的用户不可以吗?要是所有人都能读取,GUEST不就能用了。。。又或者这个系统是公司内部给所有人用的-_-||。。。修改aspnet账户密码,然后再给服务器的aspnet用户改成一样的密码。。。。

兴许是我想到太简单了,哈哈

dragoon 说...

确实是你想的太简单了。
如果是特定的某个人呢,ASP.NET 2.0不是有什么身份认证么,服务器上建个相同名字的用户不可以吗?
不是让特定人有权限,是让软件有权限。目的是任何人都通过软件访问文档。
------------------------------------
要是所有人都能读取,GUEST不就能用了。。。又或者这个系统是公司内部给所有人用的-_-||
Guest确实能用,但是对我们来说不安全。理由是所有文档都需要用过软件来访问,不能让人随便就进入删除修改。
------------------------------------
修改aspnet账户密码,然后再给服务器的aspnet用户改成一样的密码。
虽然都叫aspnet,实际全名是fileserver\aspnet和webserver\aspnet,完全就是两个帐户。另外WebServer上的Application访问FileServer可不是FileServer\aspnet身份的。而且干嘛要改fileserver的aspnet密码,这有嘛用...