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();
1、模拟 IIS 验证的帐户或用户若要在收到 ASP.NET 应用程序中每个页的每个请求时模拟 Microsoft Internet 信息服务 (IIS) 身份验证用户,必须在此应用程序的 Web.config 文件中包含 标记,并将 impersonate 属性设置为 true2、为 ASP.NET 应用程序的所有请求模拟特定用户 若要为 ASP.NET 应用程序的所有页面上
例:<identity
impersonate
="tr" userName="AD\name" password="word"/>
需要给文件夹C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files 添加用户"AD\name"的权限
参考1:在
Web
.
Config
中有一个<identity&g...
composer require kabbouchi/nova-
impersonate
在App\Nova\User.php添加
Impersonate
::make($this)字段
namespace App \ Nova ;
use KABBOUCHI \ Nova
Impersonate
\
Impersonate
;
. . .
class User extends Resource
public function fields ( Request $ request )
return [
ID :: make ()-> sortable (),
Gravatar :: make (),
Text :: make ( 'Name' )
-> sortable ()
-> rules ( 'required' , 'max:255' ),
Text :
在配置文件中添加 <identity
impersonate
= "true " userName= "Administrator " password= "123 "/> 可以了
程序员的基础教程:菜鸟程序员
转载于:https://www.cnblogs.com/guohu/p/5144180.html...
web
.
config
虽然一直用,接触最多的也就是节点appSettings和connectionSettings,今天系统的梳理一下,了解一下
web
config
各个节点的含义,先简单的浏览一下具体的
web
cofig,然后在介绍一些必要的知识。
<?xml version="1.0" encoding="utf-8"?>
<!--有时候
web
config
中配置的节点较多...
需要Composer的laravel-
impersonate
-ui
composer require hapidjus/laravel-
impersonate
-ui
将Trait Lab404\
Impersonate
\Models\
Impersonate
到您的用户模型。
namespace App ;
use Illuminate \ Contracts \ Auth \ MustVerifyEmail ;
use Illuminate \ Foundation \ Auth \ User as Authenticatable ;
use Illumi
一般来说,我们是需要对
web
.
config
文件中的一些敏感信息加密的。通常如下节点会考虑加密,除此之外,很多节点通常都不会被加密,甚至于不能被加密:
1) 一般包含一些我们自定义的信息。
2) 这个大家比较熟悉,包含连接数据库用的字符串。
3) 包含使用
impersonate
时的账户信息。
4) 包含将session置于process外的连接字符串。
提到加密,我...
前两天在VS下做个项目,用到了excel组件没有问题,但当把该项目在IIS下配置后,用浏览器浏览结果则不正确,网上说用dcom组件配置下,可是我按照要求配了,结果还是不对。
后来找到一个方法好用了。
Web
.
config
中加了一句话:“”,浏览…,结果正确,后来我就在网上查了下这句话的作用,MSDN是这样说的:
1、模拟 IIS 验证的帐户或用户
若要在收到 ASP.NET 应用程序中每个
1. 打开命令提示符。在 Windows 搜索栏中输入“cmd”,点击“命令提示符”打开。
2. 输入以下命令,并按回车键执行:`tasklist /v | findstr /i "<程序名>"`
注:将 `<程序名>` 替换为你要复制访问令牌的程序的名称,比如说是 Notepad。
3. 在输出结果中找到你要复制的程序名称,并记录下它的 PID(进程 ID)。
4. 输入以下命令,并按回车键执行:`echo off | clip`
5. 输入以下命令,并将 `<PID>` 替换为上一步记录下的进程 ID,按回车键执行:`powershell -command "& {Get-Process -id <PID> | Select-Object -ExpandProperty Handle | ForEach-Object {Get-ProcessHandle $_} | Select-Object -ExpandProperty AccessMask | ForEach-Object { if ($_ -band 0x100000) { $_ } } | Select-Object @{Name='Token';Expression={[System.Security.Principal.WindowsIdentity]::GetCurrent().
Impersonate
($_).Name}} | Select-Object Token | clip}"`
注:这个命令会将程序的访问令牌复制到剪贴板中,你可以使用 Ctrl+V 粘贴到其他应用程序中。
6. 粘贴并查看你刚刚复制的程序的访问令牌。
注意:这种方法需要管理员权限。