我已经走到尽头了!
在 Server 2003 上,我有一个配置为使用基本身份验证的 INTRANET 应用程序和一个具有专用帐户的应用程序池。
在我指定的 web.config 中
<authentication mode="Windows" />
<identity impersonate="true"/>
在 View 中(MVC 3):
<p>Environment.UserName (authentication): @Environment.UserName</p>
<p>User.Identity.Name (asp.net account): @User.Identity.Name</p>
这表明我的域帐户已按预期提取(我必须通过对话框登录应用程序)。太棒了!
但是等等!当应用程序访问文件系统或 sql server(另一台机器)时,它不会通过我的域帐户访问,而是通过池帐户访问。我可以看到通过探查器进入的 SQL 登录。我也通过文件系统权限验证了这一点。如果我将池设置为使用 NETWORK SERVICES,我将无法创建本地文件,即使我使用的域帐户具有权限并且可以交互方式创建。如果我授予 NS 帐户对这些文件的权限,它就可以工作。所以我知道一个事实,即使 View 确认我正在模拟,资源请求也不会使用该帐户,而是使用池的帐户。
如果我关闭模拟,我会按预期看到池 ID。
根据我的阅读,我应该能够使用基本身份验证来访问远程 sql server,对吧?本地盘就更不用说了。我只是不明白!
如有任何建议,我们将不胜感激。
谢谢!
最佳答案
模拟以 IIS 结束。要继续将用户凭据传递到第二个远程服务器,您需要启用 Web 服务器和文件服务器之间的委派。这是 Active Directory 中计算机之间的位标志设置。
关于asp.net - IIS 仍然通过池身份访问资源,而不是模拟用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8565796/