IIS仍然通过池标识访问资源,而不是模拟用户

时间:2011-12-19 18:36:26

标签: asp.net iis impersonation pool

我已经到了最后!

在Server 2003上,我有一个配置为使用BASIC AUTHENTICATION的INTRANET应用程序和一个带有专用帐户的应用程序池。

在web.config中我指定了

   <authentication mode="Windows" />
   <identity impersonate="true"/>

在视图中(MVC 3):

<p>Environment.UserName (authentication): @Environment.UserName</p>
<p>User.Identity.Name (asp.net account): @User.Identity.Name</p>

这表明我的域帐户正在按预期被选中(我必须通过对话框登录应用程序)。太好了!

但等等!当应用程序访问文件系统或sql server(另一台机器)时,它不会通过我的域帐户执行,而是通过池帐户执行。我可以通过profiler看到SQL登录。我也通过文件系统权限验证了这一点。如果我将池设置为使用NETWORK SERVICES,我就无法创建本地文件,即使通过我正在使用的域帐户具有权限,也可以以交互方式执行。如果我授予NS帐户对文件的权限,则可以。所以我知道一个事实,即使视图确认我正在模仿,资源请求不使用该帐户,而是使用池。

如果我关闭模拟,我会按预期在视图中看到池ID。

从我读过的内容我应该能够使用基本身份验证来访问远程sql服务器,对吗?更不用说本地磁盘了。我只是不明白!

我们非常感谢任何建议。

谢谢!

1 个答案:

答案 0 :(得分:3)

模拟以IIS结束。要继续将用户凭据传递到第二个远程服务器,您需要在Web服务器和文件服务器之间启用委派。这是Active Directory中计算机之间的一个标志设置。