身份模拟可以完全通过界面来完成: 首先如上图所示

时间:2021-09-05 08:35:17

IIS7 与 IIS 6 对比有了很大的窜改,本来在 IIS 6 下可以的设置到了 IIS 7 下有的会产生变革。身份模拟的配置上,IIS7 和 IIS6有很大差别,网上IIS6的身份模拟的文章对照多,但介绍IIS7的对照少,,我把的一些折腾的经验在这篇博客中写下来,以供参考。

IIS 7 有两种 ASP.NET Application Mode。

一种是 集成模式(Integrated Mode) 这个是默认的模式,也是微软保举的模式,另一种是 经典模式(Classic Mode) ,这种模式是用于兼容老版本。集成模式使用更便利而且安适性更好,不需要把模拟帐户的用户名和暗码写在配置文件中,这样更安适也更便利。既然我们已经用了IIS 7,那么我们还是按微软保举的方法使用集成模式对照好。

集成模式下,身份模拟可以完全通过界面来完成:

身份模拟可以完全通过界面来完成: 首先如上图所示

首先如上图所示,IIS 7 在 Server Level 下有个 IIS-> Authentication ,双击这个图标我们看到下面这个图:

身份模拟可以完全通过界面来完成: 首先如上图所示

在这个图中我们看到 IIS7 多了一个 ASP.NET Impersonation 的成果,在 Actions 里面点 Enable 开启身份模拟成果,然后点 Edit 编纂身份模拟。

身份模拟可以完全通过界面来完成: 首先如上图所示

 

我们看到上面这个编纂框,在这个编纂框中,我们指定要进行身份模拟的帐号,这个帐号必需是本地已经存在的帐号,点 Set 输入这个帐号的名称和暗码。

然后点OK。

到这里,凭据 MSDN 中的辅佐文档,身份模拟应该就算设置告成了。

然后我做了一个简单的测试页面看看身份模拟是否告成,测试措施如下:

protected void Page_Load(object sender, EventArgs e)
{
    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name);
}

运行的功效居然是:

NT AUTHORITY\IUSR

也就是说 Asp.net 没有用我设置的这个 MyAccount 帐号模拟运行,而是仍然用IUSR 帐号模拟运行。查了好久,才发明是下面问题造成:

用 Virtual Studio 2008 生成网站时,web.config 文件中默认会有这样一个设置:

<identity impersonate="true" /> 这个设置是为 IIS 6 做身份模拟而设置的。在这种情况下,用户身份的认证交给IIS来进行。当允许匿名登录时,IIS将一个匿名登录使用的标识(缺省情况下是IUSR)交给ASP.NET应用措施。当不允许匿名登录时,IIS将认证过的身份标识通报给ASP.NET应用措施。ASP.NET的具体访谒权限由该账号的权限决定。

这个设置在 IIS 7 下已颠末时了,如果用古典模式,才需要这样设置。

找到问题原因后,我把 <identity impersonate="true" />  这个配置项从 web.config 中删除了。删除后,就可以用到前面在界面上配置的用户名来模拟帐号了。

然而先不要开心的太早,紧接着就呈现了新的问题。 错误如下:

Could not load file or assembly ‘xxxx‘ or one of its dependencies. Access is denied. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 
Exception Details: System.IO.FileLoadException: Could not load file or assembly ‘GetPathFileLib‘ or one of its dependencies. Access is denied.
Source Error:

从错误提示看,应该是目前这个模拟帐户没有足够的权限去执行 bin 目录下的 xxxx.dll ,于是我把bin 目录赋予模拟帐户 MyAccount 完全控制的权限,功效还是不行,我在网上搜了一下,有人说需要将C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary 这个目录也设置为完全控制,于是照做了,还是不行。无奈之下,我把MyAccount 帐户插手了 IIS_IUSRS这个群组,问题终于解决。

身份模拟可以完全通过界面来完成: 首先如上图所示

此刻我们再运行上面阿谁显示当前用户的代码显示功效为

MachineName\MyAccout

注意:我们必需要把 <identity impersonate="true" /> 删除才行,如果仅仅是设置为 <identity impersonate="false" />

模拟的帐户会酿成  IIS APPPOOL\DefaultAppPool,这个设置是不正确的。

到这里IIS7 下设置身份模拟就全部完成了。