使用模拟时,ASP.NET 应用程序可以选择以这些应用程序当前正为之操作的客户的身份执行。通常这样做的原因是为了避免在 ASP.NET 应用程序代码中处理身份验证和授权问题。而您依赖于 Microsoft Internet 信息服务 (IIS) 来验证用户,然后将已通过验证的标记传递给 ASP.NET 应用程序;或者,如果无法验证用户,则传递未经身份验证的标记。不论何种情况,如果启用了“模拟”,则 ASP.NET 应用程序会模拟所收到的任何标记。当前模拟客户的 ASP.NET 应用程序依赖于 NTFS 目录和文件中的设置来允许客户获得访问权限或拒绝其访问。务必将服务器文件空间格式化为 NTFS,以便可以设置访问权限。

默认情况下禁用模拟。为了 ASP 的兼容性,用户必须显式启用模拟。如果为给定的应用程序启用模拟,则 ASP.NET 总是模拟 IIS 提供给 ISAPI 扩展的访问标记。该标记既可以是已验证用户标记,也可以是匿名用户的标记(如 IUSR_MACHINENAME)。不论应用程序中使用哪种身份验证类型,模拟都会发生。

只能模拟应用程序代码,编译和配置作为进程标记读取。编译的结果放在“Temporary ASP.NET files”目录中。所模拟的帐户需要对该目录的读/写访问权。如果应用程序位于通用命名规则 (UNC) 共享上,除非使用配置帐户,否则,ASP.NET 将总是模拟提供给 IIS 的标记来访问该共享。如果提供了显式配置的帐户,ASP.NET 将使用该帐户取代 IIS UNC 标记。确实需要基于每个请求的模拟的应用程序可以直接配置为模拟提交请求的用户。

默认情况下,在计算机级别上禁用模拟。而且除非被重写,否则所有的应用程序域都继承此设置。可以通过将配置文件放置在应用程序根目录下来启用模拟。有关 ASP.NET 配置系统的更多信息,请参见 ASP.NET 配置。

与其他配置指令的情况相同,此指令分层应用。除非被显式重写,否则,层次结构中的嵌套程序将遵从它。此设置的默认值如下所示。

<impersonation enable="false"/>

为应用程序启用模拟的最小配置文件可能看上去和下面的示例类似。

<!-- Web.config file. -->
<identity impersonate="true"/>

还有以可配置身份运行应用程序的名称支持。例如:

<identity impersonate="true" userName="contoso/Jane" password="pass"/>

这将允许整个应用程序以 contoso/Jane 运行,不论请求的身份如何,只要密码正确即可。可以将这种类型的模拟委托给另一台计算机。

您可以以编程的方式读取被模拟用户的标识,如下例所示。

[Visual Basic]
Dim username As String = System.Security.Principal.WindowsIdentity.GetCurrent().Name

[C#]
String username = System.Security.Principal.WindowsIdentity.GetCurrent().Name;

在上例中,userName 和 password 以明文形式存储在配置文件中。虽然 IIS 不传输 .config 文件来响应用户代理请求,但是可以通过其他途径读取配置文件,例如通过在包含服务器的域上具有适当凭据的已经过身份验证的用户。为了增强安全性,标识部分支持在注册表中存储加密的 userName 和 password 属性,如下例所示。

userName="registry:HKLM/Software/AspNetIdentity,Name"
   password="registry:HKLM/Software/AspNetIdentity,Password"

字符串中位于关键字 registry 之后和逗号之前的部分表示 ASP.NET 打开的注册表项的名称。逗号之后的部分包含一个字符串值的名称,ASP.NET 从此名称中读取凭据。必须有逗号,并且凭据必须存储在 HKLM 配置单元中。如果配置格式不正确,则 ASP.NET 不会启动辅助进程,然后将显示造成当前帐户创建失败的代码路径。

凭据必须为 REG_BINARY 格式,并且包含 Windows API 函数 CryptProtectData 调用的输出。可以用 ASP.NET 设置注册表控制台应用程序 (Aspnet_setreg.exe) 来创建加密凭据并将它们存储在注册表中。该应用程序使用 CryptProtectData 完成加密。若要同 Visual C++ 源代码和文档一起下载 Aspnet_setreg.exe,请访问 Web 站点 www.asp.net 并搜索“aspnet_setreg”。

应该对存储加密凭据的密钥的访问权限进行配置,仅向 Administrators 和 SYSTEM 提供访问权。由于密钥会被作为 SYSTEM 运行的 ASP.NET 进程读取,因此应设置以下权限:

Administrators:F
SYSTEM:F
CREATOR OWNER:F
ProcessAccount:R
这可以提供两道保护数据的防线:

ACL 权限要求访问数据的身份是 Administrator。
攻击者必须在服务器上运行代码 (CryptUnprotectData) 才能恢复帐户的凭据。

ASP.NET实现身份模拟相关推荐

  1. ASP.net的身份验证方式有哪些?分别是什么原理?

    Asp.net的身份验证有有三种,分别是"Windows | Forms | Passport",其中又以Forms验证用的最多,也最灵活. Forms 验证方式对基于用户的验证授 ...

  2. [转载]细说ASP.NET Windows身份认证

    细说ASP.NET Windows身份认证 阅读目录 开始 认识ASP.NET Windows身份认证 访问 Active Directory 在ASP.NET中访问Active Directory ...

  3. 细说ASP.NET Forms身份认证

    细说ASP.NET Forms身份认证 阅读目录 开始 ASP.NET身份认证基础 ASP.NET身份认证过程 如何实现登录与注销 保护受限制的页面 登录页不能正常显示的问题 认识Forms身份认证 ...

  4. 实战解读ASP.NET Core身份认证

    长话短说:上文我们聊了 ASP.NET Core 基于声明的访问控制到底是什么鬼? 今天我们乘胜追击:聊一聊ASP.NET Core 中的身份验证. 身份验证是确定用户身份的过程.授权是确定用户是否有 ...

  5. Asp.Net MVC 身份验证-Forms

    Asp.Net MVC 身份验证-Forms 在MVC中对于需要登录才可以访问的页面,只需要在对应的Controller或Action上添加特性[Authorize]就可以限制非登录用户访问该页面.那 ...

  6. 实现基于 ASP.NET Forms 身份验证的跨子域单点登录

    对于跨应用程序的 ASP.NET Forms 身份验证,相信大家应该都不陌生,几年前很多文章都介绍了如何实现,比如 MSDN 的 跨应用程序进行 Forms 身份验证,唐朝程序员 的 ASP.NET站 ...

  7. ASP.NET Core身份认证服务框架IdentityServer4(2)-整体介绍

    一.整体情况 现代应用程序看起来更像这个: 最常见的相互作用: 浏览器与Web应用程序的通信 Browser -> Web App Web应用程序与Web API通信 基于浏览器的应用程序与We ...

  8. asp.net mvc 身份验证中返回绝对路径的ReturnUrl

    在asp.net mvc进行身份验证只用在需要验证的Action或者Controller上标记一个[authorization]即可,如果用户没有登陆,此时将返回的ActionResult是HttpU ...

  9. [转][.NET 基于角色安全性验证] 之三:ASP.NET Forms 身份验证

    在开发过程中,我们需要做的事情包括: 1. 在 web.config 中设置 Forms 身份验证相关参数. 2. 创建登录页. 登录页中的操作包括: 1. 验证用户名和密码是否正确. 2. 创建身份 ...

最新文章

  1. 2022-2028年中国XPS挤塑板行业市场全景评估及产业前景规划报告
  2. tf.keras.layers.Resizing 示例 改变维度的层
  3. 支持向量机中的函数距离的理解
  4. apache 伪静态 .htaccess
  5. 首批骁龙875旗舰!小米11屏幕依然是挖孔
  6. HTML 字符实体 lt; gt: amp;等
  7. PHP EOF使用方法
  8. 手机号空号检测的几点建议
  9. STM32驱动AD9833
  10. css 文字不规则排版,DIV CSS解决不规则文字排版
  11. 直角三角公式计算机,直角三角函数公式表
  12. Android studio:select process to attach to...找不到debug调试的目录
  13. 无为职中计算机专业期中考试高一,无为县襄安高级职业中学
  14. 使用you-get批量下载B站视频
  15. Unite 2017 Shanghai 四大技术专场全面解锁
  16. Java8新特性之- Lambda表达式和函数式接口
  17. DatePicker时间格式化年月日
  18. 激光雷达标定(坐标系转换)
  19. Matlab 2018a中文版下载方法
  20. SAE J1850 汽车总线协议 VPW 物理层驱动程序在STM32芯片上的实现

热门文章

  1. java格林认证_Java考试格林模拟题
  2. MySQL面试题 | 附答案解析(九)
  3. python操作word文档(python-docx)
  4. 4.1 ucGUI 图片显示方法
  5. 最新开源LiDAR数据集LSOOD:四种常见的室外物体分类
  6. C++中extern使用
  7. ATS 5.3.0中parent.config配置文件解读
  8. Django Python:完整的BUNDLE + Django真实项目2021
  9. 怎么编写段错误(Segmentation fault)的程序
  10. L1-027 出租 (C++暴力解法)