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,那么我们还是按微软推荐的方式使用集成模式比较好。

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

首先如上图所示,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 下设置身份模拟就全部完成了。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索iis7
, Win2008
身份模拟
,以便于您获取更多的相关知识。

时间: 2024-09-06 11:46:12

Win2008 server + IIS7 设置身份模拟(ASP.NET impersonation)_实用技巧的相关文章

Microsoft SQL Server 2005 Express 远程访问设置详述,100%成功篇_实用技巧

概述 Microsoft SQL Server 2005 Express Edition是Microsoft数据库的低端解决方案,是免费的,并且可以随软件免费发布,而就其数据库功能对于一般的企业级应用已足够了.但 默认安装时只允许本地访问,而不能远程访问.为了解决这种问题,网上有不少文章进行了介绍,但是都不全,如果你照着做,大都只完成了部份功能,而不能完全成功.本人查了大量资料,几次都想放弃,最终还是成功配置了,现写本文详细阐述 SQL Server 2005 Express Edition 启

ASP.NET(C#)_实用技巧

 一个生成不重复随机数的方法 //生成不重复随机数算法 private int GetRandomNum(int i,int length,int up,int down) {  int iFirst=0;  Random ro=new Random(i*length*unchecked((int)DateTime.Now.Ticks));   iFirst=ro.Next(up,down);  return iFirst; }  发表于 @ 2005年12月30日 3:44 PM | 评论 (

asp.net 身份验证机制实例代码_实用技巧

ASP.NET提供了3种认证方式:windows身份验证.Forms验证和Passport验证. windows身份验证: IIS根据应用程序的设置执行身份验证.要使用这种验证方式,在IIS中必须禁用匿名访问. Forms验证:用Cookie来保存用户凭证,并将 未经身份验证的用户重定向到自定义的登录页. Passport验证:通过Microsoft的集中身份验证服务执行的,他为成员站点提供单独登录和核心配置文件服务. 关于这三种验证方式的配置,推荐一篇文章:http://www.jb51.ne

asp.net下配置数据源时出现: 未将对象引用设置到对象的实例。_实用技巧

打开vs2005或vs2008,  新建网站,把ACCCESS数据库Copy到App_Data里,  拖"AccessDataSource"到窗口里,  配置数据源...  选择数据库  下一步  sql语句里是空的,点"查询生成器..."  弹出:  ---------------------------  Microsoft Visual Studio  ---------------------------  未将对象引用设置到对象的实例.  --------

asp.net 模拟提交有文件上传的表单(通过http模拟上传文件)_实用技巧

我们暂且不说如何去模拟数据,通过一个简单的form看看当请求发生时,客户端提交了什么样的数据给服务端. 下面是一个简单的html form,两个文本输入框,一个文件上传(这里我选择一张图片),注意有文件上传的form的enctype属性. 复制代码 代码如下: <form action="sql.aspx" method="post" enctype="multipart/form-data"> <input id="

ASP.NET.4.5.1+MVC5.0设置系统角色与权限(一)_实用技巧

数据结构 权限分配 1.在项目中新建文件夹Helpers 2.在HR.Helpers文件夹下添加EnumMoudle.Cs 复制代码 代码如下: namespace HR.Helpers {     public enum EnumMoudle     {         /// <summary>         /// 模块         /// </summary>         [EnumTitle("用户管理")]         SysUserM

从客户端检测到有潜在危险的Request.Form值的asp.net代码_实用技巧

1.web.config文档<system.web>后面加入这一句: 复制代码 代码如下: <pages validaterequest="false"/> 示例: XML/HTML 复制代码 代码如下: <?xml version="1.0" encoding="gb2312" ?> <configuration> <system.web> <pages validaterequ

jQuery 插件autocomplete自动完成应用(自动补全)(asp.net后台)_实用技巧

autocomplete官网 : http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/ (可下载jQuery autocomplete插件). 淘宝商品搜索功能 效果: 下面来使用 autocomplete插件来实现类似效果.1. 创建 AjaxPage.aspx 页面,在其中定义 WebMethod 方法来返回 搜索页面需要的输入框所有提示条目. 后台代码如下: 复制代码 代码如下: using System.Coll

注册页实现激活邮箱验证(asp.net c#)_实用技巧

-----------注册页前台 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Registe.aspx.cs" Inherits="CSDN博客.Registe" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &