Windows 2008 server + IIS 7 设置身份模拟(ASP.NET impersonation)

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 下设置身份模拟就全部完成了。

时间: 2024-08-30 07:25:04

Windows 2008 server + IIS 7 设置身份模拟(ASP.NET impersonation)的相关文章

Windows 2008 server IIS 7 中开启CGI, ISAPI

默认情况下,IIS是没有开启的,需要通过下面的步骤开启

存储学习之--通过StarWind在Windows 2008 Server模拟IP SAN

存储学习之--通过StarWind在Windows 2008 Server模拟IP SAN 一.StarWind 介绍 StarWind 与 StarPort iSCSI 一起,这个软件准许你输出任何本地 CD 和 DVD 数据到网络上,你在网络上能够虚拟硬盘,输出整体服务器储存子系统和大量的快照工作. 1.软件介绍 ISCSI软件. StarWind 是一个独立于硬件,适合网吧.企业虚拟磁盘数据管理.速度非常的快! 成本效益和可升级的存储管理解决方案,能够得到存储区域网络的好处,如:增强的灾难

windows 2008 server web服务器的搭建以及站点的简单部署

话说windows 2008 server在诸如FTP.WEB.SMTP等服务的搭建还是相当方便的 1.安装windows 2008 server操作系统 2.安装IIS 点击打开链接:当然这里可以不用进行身份验证设置,只需匿名登录即可 3.添加虚拟目录 点击打开链接:这里的主要目的是扩展站点的容量等 4.远程登录许可 点击打开链接:这里仅仅是为了操作方便(如不需要,此步可以略去) 5.测试 默认主页(位于C:/inetpub/wwwroot/)已经被我修改

[转帖]windows 2008 Server R2 /Win7启用TLS 1.2

来自新浪博客的 一个文章 自己很早之前曾经看过 iis的加密工具 但是当时没有认识到TLS1.2协议的问题 这里 晚上学习了一下.  http://blog.sina.com.cn/s/blog_1673e9cce0102wtto.html windows 2008 Server R2 /Win7启用TLS 1.2 满足苹果的ATS   微信企业号发布公告, 从2017年1月1日起 App Store中的所有应用都必须启用 App Transport Security安全功能.App Trans

Windows 2008 Server 远程 声音

Windows 2008 Server在默认情况下,是禁止使用桌面桌面连接后播放声音的(提示音频服务未启用).可以通过下面的方法启用音频: 管理工具->远程桌面服务->远程桌面会话主机配置,在配置界面中的“连接”项下,打开RDP-Tcp的属性->客户端设置选项卡中,把重定向里的“禁用以下项目”中的和音频相关的选框(音频和视频播放.录制音频)都取消勾选,然后点“确定”. 再通过远程桌面登录时,就有声音了.

windows 2008 server 英文版 支持中文显示

1:打开Start menu(开始菜单)并单击Control Panel(控制面板)打开它 2:单击Clock, Language, and Region(时钟.语言和区域)下面的Change display language(更改显示语言) 3:切换到Administrative(管理)选项卡.单击Change system locale-(更改系统区域设置)按钮注:若弹出用户账户控制窗口,请允许以继续. 4:将Current system locale (当前系统区域设置)改为:Chines

Windows 2008 server r2 集成usb3.0驱动

在生产工作中发现,现在大部分新生产的机器主板都将usb的接口更换成usb3.0,而作为前置机的设备安装的windows 2008 server r2系统本身并没有usb3.0驱动,导致安装启动U盘不能正常安装操作系统,现将Windows 2008 server r2 集成usb3.0的方法分享给大家.一 · 工具/镜像 1.Windows server 2008 X64 With SP2 简体中文版安装镜像 2.UltraISO软碟通软件(注册码)用于制作镜像 3.Windows usb ins

[BAT]通过schtasks.exe远程调用windows 2008 server上的计划任务,提示ERROR : Access is denied

在windows 2008 server 上建了一个计划任务,想通过命令 schtasks /run /tn "IPADForAdvisor_QA_APITest" /s SZPCWIN2K801 /u msdomain1\jzhang6 /p jzhang6'spassword 来远程启动这个计划任务,总是提示ERROR : Access is denied 登录的这个用户名和密码是在 SZPCWIN2K801 的 Administrators Group 里面的,而且是在同一个域里

MAC OS通过Ctrol+Alt+Delete登录Windows 2008 Server虚拟机

MAC OS通过Ctrol+Alt+Delete登录Windows 2008 Server虚拟机 在Mac os上通过VirtualBox安装了Windows 2008 Server虚拟机,在Windows 2008 Server出现登录时,提示要按"Ctrol+Alt+Delete"登录,但是在Mac Pro的键盘上无论按'Fn+Ctrol+Option(Alt)+Delete'或其他组合键都不好使! 出现登录界面 选择VirtulBox工具管理界面Insert 'ctrol+alt