源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Win2008 server + IIS7 设置身份模拟(ASP.NET impersonation)

  • 时间:2022-06-27 20:30 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Win2008 server + IIS7 设置身份模拟(ASP.NET impersonation)
作者:eaglet 转载请注明出处 IIS7 与 IIS 6 相比有了很大的改动,原来在 IIS 6 下可以的设置到了 IIS 7 下有的会发生变化。身份模拟的配置上,IIS7 和 IIS6有很大不同,网上IIS6的身份模拟的文章比较多,但介绍IIS7的比较少,我把的一些折腾的经验在这篇博客中写下来,以供参考。 IIS 7 有两种 ASP.NET Application Mode。 一种是 集成模式(Integrated Mode) 这个是默认的模式,也是微软推荐的模式,另一种是 经典模式(Classic Mode) ,这种模式是用于兼容老版本。集成模式使用更方便而且安全性更好,不需要把模拟帐户的用户名和密码写在配置文件中,这样更安全也更方便。既然我们已经用了IIS 7,那么我们还是按微软推荐的方式使用集成模式比较好。 集成模式下,身份模拟可以完全通过界面来完成: [img]http://files.jb51.net/upload/201110/20111025095618828.png[/img] 首先如上图所示,IIS 7 在 Server Level 下有个 IIS-> Authentication ,双击这个图标我们看到下面这个图:   [img]http://files.jb51.net/upload/201110/20111025095618358.png[/img]   在这个图中我们看到 IIS7 多了一个 ASP.NET Impersonation 的功能,在 Actions 里面点 Enable 开启身份模拟功能,然后点 Edit 编辑身份模拟。 [img]http://files.jb51.net/upload/201110/20111025095618948.png[/img]   我们看到上面这个编辑框,在这个编辑框中,我们指定要进行身份模拟的帐号,这个帐号必须是本地已经存在的帐号,点 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 文件中默认会有这样一个设置:
<[b]identity[/b][b]impersonate[/b]="true" />
这个设置是为 IIS 6 做身份模拟而设置的。在这种情况下,用户身份的认证交给IIS来进行。当允许匿名登录时,IIS将一个匿名登录使用的标识(缺省情况下是IUSR)交给ASP.NET应用程序。当不允许匿名登录时,IIS将认证过的身份标识传递给ASP.NET应用程序。ASP.NET的具体访问权限由该账号的权限决定。 这个设置在 IIS 7 下已经过时了,如果用古典模式,才需要这样设置。 找到问题原因后,我把 <[b]identity[/b][b]impersonate[/b]="true" />  这个配置项从 web.config 中删除了。删除后,就可以用到前面在界面上配置的用户名来模拟帐号了。 然而先不要高兴的太早,紧接着就出现了新的问题。 错误如下: [h3][i]Could not load file or assembly 'xxxx' or one of its dependencies. Access is denied.[/i][/h3][b]Description: [/b]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. [b]Exception Details: [/b]System.IO.FileLoadException: Could not load file or assembly 'GetPathFileLib' or one of its dependencies. Access is denied. [b]Source Error:[/b] 从错误提示看,应该是目前这个模拟帐户没有足够的权限去执行 bin 目录下的 xxxx.dll ,于是我把bin 目录赋予模拟帐户 MyAccount 完全控制的权限,结果还是不行,我在网上搜了一下,有人说需要将C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary 这个目录也设置为完全控制,于是照做了,还是不行。无奈之下,我把MyAccount 帐户加入了 IIS_IUSRS这个群组,问题终于解决。 [img]http://files.jb51.net/upload/201110/20111025095618460.png[/img] 现在我们再运行上面那个显示当前用户的代码显示结果为
MachineName\MyAccout
注意:我们必须要把 <[b]identity[/b][b]impersonate[/b]="true" /> 删除才行,如果仅仅是设置为 <[b]identity[/b][b]impersonate[/b]="false" /> 模拟的帐户会变成  IIS APPPOOL\DefaultAppPool,这个设置是不正确的。 到这里IIS7 下设置身份模拟就全部完成了。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部