时间:2021-05-25
作者:eaglet
转载请注明出处
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 文件中默认会有这样一个设置:
<identityimpersonate="true" />这个设置是为 IIS 6 做身份模拟而设置的。在这种情况下,用户身份的认证交给IIS来进行。当允许匿名登录时,IIS将一个匿名登录使用的标识(缺省情况下是IUSR)交给ASP.NET应用程序。当不允许匿名登录时,IIS将认证过的身份标识传递给ASP.NET应用程序。ASP.NET的具体访问权限由该账号的权限决定。这个设置在 IIS 7 下已经过时了,如果用古典模式,才需要这样设置。
找到问题原因后,我把 <identityimpersonate="true" /> 这个配置项从 web.config 中删除了。删除后,就可以用到前面在界面上配置的用户名来模拟帐号了。
然而先不要高兴的太早,紧接着就出现了新的问题。 错误如下:
从错误提示看,应该是目前这个模拟帐户没有足够的权限去执行 bin 目录下的 xxxx.dll ,于是我把bin 目录赋予模拟帐户 MyAccount 完全控制的权限,结果还是不行,我在网上搜了一下,有人说需要将C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary 这个目录也设置为完全控制,于是照做了,还是不行。无奈之下,我把MyAccount 帐户加入了 IIS_IUSRS这个群组,问题终于解决。
现在我们再运行上面那个显示当前用户的代码显示结果为
MachineName\MyAccout注意:我们必须要把 <identityimpersonate="true" /> 删除才行,如果仅仅是设置为 <identityimpersonate="false" />模拟的帐户会变成 IIS APPPOOL\DefaultAppPool,这个设置是不正确的。
到这里IIS7 下设置身份模拟就全部完成了。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
需求:在IIS7、7.5、8.0、8.5和ASP.NET中删除HTTP响应标头,修改或隐藏IIS7、7.5、8.0、8.5的Server头信息。解决方案:使用u
ASP.NET与IIS是紧密联系的,由于IIS6.0与IIS7.0的工作方式的不同,导致ASP.NET的工作原理也发生了相应的变化。IIS6(IIS7的经典模式
使用Win7/Win2008/R2操作系统的用户在不断增加,Win7下测试程序时,如果程序出错,IIS7会提示HTTPError500-InternalServ
服务端环境:Windows2008+IIS7客户端浏览器设置:取消“显示友好的HTTP错误信息”IIS7设置(GUI):1.-ASP-调试属性-将错误发送到浏览
ASP.NET提供了3种认证方式:windows身份验证、Forms验证和Passport验证。windows身份验证:IIS根据应用程序的设置执行身份验证。要