1、模拟 IIS 验证的帐户或用户

若要在收到 ASP.NET 应用程序中每个页的每个请求时模拟 Microsoft Internet 信息服务 (IIS) 身份验证用户,必须在此应用程序的 Web.config 文件中包含 <identity> 标记,并将 impersonate 属性设置为 true

2、为 ASP.NET 应用程序的所有请求模拟特定用户

若要为 ASP.NET 应用程序的所有页面上的所有请求模拟特定用户,可以在该应用程序的 Web.config 文件的 <identity> 标记中指定 userName 和 password 属性。例如:
<identity impersonate="true" userName="accountname" password="password" />

IIS 匿名身份验证

Web.config 设置

变量位置

结果标识

<identity impersonate="true"/>
<authentication mode="Windows" />

HttpContext
WindowsIdentity
Thread

-
MACHINE\IUSR_MACHINE
-

<identity impersonate="false"/>
<authentication mode="Windows" />

HttpContext
WindowsIdentity
Thread

-
MACHINE\ASPNET
-

<identity impersonate="true" />
<authentication mode="Forms" />

HttpContext
WindowsIdentity
Thread

用户提供的名称
MACHINE\IUSR_MACHINE
用户提供的名称

<identity impersonate="false"/>
<authentication mode="Forms" />

HttpContext
WindowsIdentity
Thread

用户提供的名称
MACHINE\ASPNET
用户提供的名称

IIS 基本身份验证

Web.config 设置

变量位置

结果标识

<identity impersonate="true"/>
<authentication mode="Windows" />

HttpContext
WindowsIdentity
Thread

域\用户名
域\用户名
域\用户名

<identity impersonate="false"/>
<authentication mode="Windows" />

HttpContext
WindowsIdentity
Thread

域\用户名
MACHINE\ASPNET
域\用户名

<identity impersonate="true"/>
<authentication mode="Forms" />

HttpContext
WindowsIdentity
Thread

用户提供的名称
域\用户名
用户提供的名称

<identity impersonate="false"/>
<authentication mode="Forms" />

HttpContext
WindowsIdentity
Thread

用户提供的名称
MACHINE\ASPNET
用户提供的名称

IIS 摘要式身份验证

Web.config 设置

变量位置

结果标识

<identity impersonate="true"/>
<authentication mode="Windows" />

HttpContext
WindowsIdentity
Thread

域\用户名
域\用户名
域\用户名

<identity impersonate="false"/>
<authentication mode="Windows" />

HttpContext
WindowsIdentity
Thread

域\用户名
MACHINE\ASPNET
域\用户名

<identity impersonate="true"/>
<authentication mode="Forms" />

HttpContext
WindowsIdentity
Thread

用户提供的名称
域\用户名
用户提供的名称

<identity impersonate="false"/>
<authentication mode="Forms" />

HttpContext
WindowsIdentity
Thread

用户提供的名称
MACHINE\ASPNET
用户提供的名称

IIS 集成 Windows

Web.config 设置

变量位置

结果标识

<identity impersonate="true"/>
<authentication mode="Windows" />

HttpContext
WindowsIdentity
Thread

域\用户名
域\用户名
域\用户名

<identity impersonate="false"/>
<authentication mode="Windows" />

HttpContext
WindowsIdentity
Thread

域\用户名
MACHINE\ASPNET
域\用户名

<identity impersonate="true"/>
<authentication mode="Forms" />

HttpContext
WindowsIdentity
Thread

用户提供的名称
域\用户名
用户提供的名称

<identity impersonate="false"/>
<authentication mode="Forms" />

HttpContext
WindowsIdentity
Thread

用户提供的名称
MACHINE\ASPNET
用户提供的名称

以上各表说明了在 IIS 身份验证设置的范围内,从保存 IPrincipal 和/或 IIdentity 对象的每个变量中获取的结果标识。表中使用了以下缩写词:

HttpContext = HttpContext.Current.User,它返回包含当前 Web 请求的安全信息的 IPrincipal 对象。这是经身份验证的 Web 客户端。

WindowsIdentity = WindowsIdentity.GetCurrent(),它返回当前执行的 Win32 线程的安全性上下文的标识。

Thread = Thread.CurrentPrincipal,它返回当前执行的 .NET 线程(在 Win32 线程之上)的主体。

在Web.Config中有一个<identity>
元素,可以使其impersonate属性为true来设置本应用程序的身份,从而达到扮演其他账号身份的目的。而具体的“扮演”有两种方式:
(1)、<identity impersonate="true" />
这种方式的话ASP.NET进程将扮演http/https请求者的身份。而具体是什么帐号,就跟IIS的安全性设定有关了:
如果IIS允许匿名访问,那么被扮演的将是Iuser_Machine帐号(因为默认的匿名访问账号是Iuser_Machine,当然如果修改过,那被扮演的就是修改过的帐号)。
如果IIS不允许匿名访问,那么浏览器请求者的身份肯定是一个Windows帐号,这个帐号就是被扮演的对象。

(2)、<identity impersonate="true" userName="Account" password="Password"/>
这种方式就直接设置所扮演的固定用户身份

第(2)种扮演方法将把password明文的写在Web.Config里,很不安全

PS1:微软不推荐使用扮演,无论扮演哪个帐号,一方面是安全性问题(被扮演的帐号可能有一些程序并不需要的多余权限,可能被利用),另一方面是可伸缩性问题(Scalability),因为在访问SQL Server等资源时,无法利用连接池等手段。

PS2:在\%windows%\Microsoft.NET\Framework\Version\Config目录中找到machine.config文件,其中有一个<processModel>的tag:

<processModel enable="true" ... userName="machine" password="AutoGenerate" ... />

其中的userName="machine"就是指定使用本机ASPNET帐号(.\ASPNET)作为ASP.NET工作进程的默认账号。

这个默认帐号是可以修改的,如果开发人员将userName修改为一个域用户帐号:
<system.web>
                <processModel enable="true" userName="domain\user" password="password"/>
</system.web>

那么ASP.NET工作进程的身份就变成了domain\user。只要这个域用户帐号拥有需要的权限,那么machine.config所在机器上所有ASP.NET程序都可以访问域中其他服务器的资源,包括存取用网络共享路径指定的文件。

如果指定userName="system",那么ASP.NET程序将以LocalSystem身份运行,可以存取几乎所有本地资源,因此非常危险!

无论machine.config指定哪个默认帐号,这个默认帐号都可以被应用程序的web.config设置的Impersonation覆盖,即特定应用程序可以以其他身份运行。

///
在代码中模拟IIS认证帐号
在代码中使用身份模拟更加灵活,可以在指定的代码段中使用身份模拟,在该代码段之外恢复使用ASPNET本机帐号。该方法要求必须使用Windows的认证身份标识。下面的例子在代码中模拟IIS认证帐号:
System.Security.Principal.WindowsImpersonationContext impersonationContext;
impersonationContext = ((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate();

//Insert your code that runs under the security context of the authenticating user here.

impersonationContext.Undo();

关于 web.config impersonate 帐号模拟相关推荐

  1. 管理艾泰路由器WEB认证帐号脚本

    放宿舍隔离pppoe路由器的艾泰路由不可建立单独管理WEB认证的帐号,所以写了个脚本管理WEB认证帐号. 添加WEB认证帐号的核心代码 Func addHotSpotUser();从路由器上获取帐号数 ...

  2. Asp.net Web.Config - 配置元素customErrors

    Asp.net配置文件的配置方式,其实在MSDN里面是写得最清楚的了.可惜之前一直未曾了解到MSDN的强大. 先贴个地址:http://msdn.microsoft.com/zh-cn/library ...

  3. 怎么样把亚马逊EC2的帐号清除干净

    注销帐号请看 传送门:如何关闭Amazon AWS账户_by2n的专栏-CSDN博客 好了,现在我们注销了 Amazon Web Services的帐号,你的邮箱会收到确认注销邮件 但是有个问题,我们 ...

  4. 配置Web.config 元素CustomErrors

    一.customErrors 元素 属性 说明 defaultRedirect 指定出错时将浏览器定向到的默认 URL.如果未指定该属性,则显示一般性错误. 可选的属性. URL 可以是绝对的(如 w ...

  5. java web 项目如何获取客户端登录帐号信息(用于SSO或其他)

    前言 在java 中可以通过System 获取操作系统的相关信息. 类似: String sys_user_name = System.getProperty("user.name" ...

  6. 利用phantomjs模拟登录网站(帐号登陆)

    首先我们就以CSDN博客的登录为例,这里的登陆账号和密码,读者可以使用自己的,只要将登录帐号和密码修改一下就可以登录并抓取网页数据下来了,首先我们利用eclipse创建一个java工程,主要是用来调用 ...

  7. PCB 模拟Windows管理员域帐号安装软件

    在我们PCB行业中,局域网的电脑一般都会加入域控的,这样可以方便集中管理用户权限,并可以对访问网络资源可以进行权限限制等. 由于加入了域控对帐号权限的管理,这样一来很多人都无权限安装软件,比如:PCB ...

  8. wegame饥荒一直登录中_苹果游戏推荐ios帐号共享 一小时人生(希望之村)移动版 模拟经营沙盒世界饥荒游戏...

    关注我们,每天准时更新更多更好玩更有趣的游戏帐号id和实用软件. 公众号免费运营维护实属不易,付费游戏与应用成本高昂,几元至几十元不等,全内购游戏动辄上百,每天更新一款或多款游戏与应用更加不易,公众号 ...

  9. 使用C# impersonation进行windows帐号的校验

    一早在浏览代码时看到如下代码(我想这段代码的来源是kb306158),这段代码的作用是,当一个通过Active Directory账号登陆系统的用户,需要上传.创建目录.下载时,需要先校验该用户是否具 ...

最新文章

  1. 学Java可以看哪些书?6本Java书籍推荐
  2. 缓存一致性协议MESI
  3. app推送以及提示音java,springboot 整合 Jpush 极光推送
  4. 【转】设计模式 ( 十七) 状态模式State(对象行为型)
  5. Linux数据库1366错误,ERROR 1366 (HY000): Incorrect string value:’XXX’ for column 'XXX at row 1解决...
  6. 关于Maven的7个问题
  7. 能耗监测系统是干嘛的?
  8. 如何用postman实现接口自动化测试
  9. 006输出9行内容,第1行输出1,第2行输出12,第3行输出123,以此类推,第9行输出123456789。
  10. 计算机老师 杂事多,有人说,老师忙,都忙在了教学之外的杂事上。你怎么看?...
  11. 关于0x016f2818这个幻数
  12. GO富集分析相关概念
  13. 绑定ZBar的OpenCV条形码和QR码扫描器
  14. 【操作系统】知识点集合(幕布,思维导图)
  15. 红领巾小创客机器人活动计划_红领巾小创客活动过程.docx
  16. 创新技术简化施工,助高速公路穿越海峡
  17. 【微信小程序】事件绑定
  18. js祝愿墙百度云_拒绝的祝福(或超越“否”)
  19. tcpdump 命令使用教程
  20. 计算机一级理论课及答案,2013年春季江苏省高校计算机一级B考试理论题(附答案) - 副本.doc...

热门文章

  1. http://ftp.gnu.org/gnu/ http://ftp.gnu.org/gnu/libc/
  2. 开启sqlplus中执行计划
  3. 锋利的js前端分页之jQuery
  4. zabbix server和client的快速部署
  5. 开机出现GRUB error22的解决办法
  6. 面试官系统精讲Java源码及大厂真题 - 25 整体设计:队列设计思想、工作中使用场景
  7. NPM包管理器跟换国内镜像CNPM
  8. Mac下的Docker及Kubernetes(k8s)本地环境搭建与应用部署、管理界面kubernetes-dashboard
  9. Linxu:磁盘分区
  10. 函数式编程 -- 函数组合