windows 7的impersonation什么意思

WindowsWmi_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
WindowsWmi
上传于|0|0|文档简介
&&使用Windows WMI,你可以获取Windows的硬件,进程等信息,适合系统管理员使用。
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩38页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢[WCF权限控制]模拟(Impersonation)与委托(Delegation)[上篇]-阿里云资讯网
[WCF权限控制]模拟(Impersonation)与委托(Delegation)[上篇]
发布时间:
更新时间:
来源:网络
作者:doublefly
  由于服务操作是在寄宿进程中执行,在默认的情况下,服务操作是否具有足够的权限访问某个资源(比如文件)决定于执行寄宿进程Windows帐号的权限设置,而与作为客户Windows帐号无关。在有多情况下,我们希望服务操作执行在基于客户端的安全上下文中执行,以解决执行服务进行的帐号权限不足的问题。这就涉及到一个重要的话题——模拟(Impersonation)与委托(Delegation)[实例程序源代码从这里下载]
目录: 一、从访问令牌(Access Token)说起 二、再谈WindowsIdentity 三、实例演示:通过身份模拟的方式读取文件  一、从访问令牌(Access Token)说起
  当我们以某个Windows帐号的名义成功登录Windows的时候,操作系统会创建一个访问令牌(Access Token)。访问令牌不仅仅包括登录用户身份相关信息,还包括该用户具权限信息,比如ACL(Access Control List)。当我们开启某个进程的时候,该访问令牌会自动附加到该进程上,作为其安全上下文重要的组成部分。我们也可以将访问令牌作为进程或者线程安全描述符的封装。Windows下的访问令牌主要具有如下两种形式。 主令牌(Primary Token):每一个进程都具有一个唯一的主令牌,进行通过主令牌被开启; 模拟令牌(Impersonation Token):在默认的情况下,当线程被开启的时候,所在进程的主令牌会自动附加到当前线程上,作为线程的安全上下文。而线程可以运行在另一个非主令牌的访问令牌下执行,而这个令牌被称为模拟令牌。而指定线程的模拟令牌的过程被称为模拟。
  我们可以调用Win32函数LogonUser,通过输入Windows帐号、密码、域名以及认证相关信息创建一个访问令牌。LogonUser被调用的时候,会试图进行基于本机的登陆操作。访问令牌会在认证成功认证的情况下被创建并返回。LogonUser的定义如下,输入参数依次代表的含义分别是用户名、域名(可选参数)、密码(明文)、登录类型和登录提供者。而创建的访问令牌以输出操作的形式返回。关于LogonUser函数的详细说明,可以参考MSDN在线文档。BOOL LogonUser(
__in LPTSTR lpszUsername,
__in_opt LPTSTR lpszDomain,
__in LPTSTR lpszPassword,
__in DWORD dwLogonType,
__in DWORD dwLogonProvider,
__out PHANDLE phToken
  当我们进行模拟而试图创建一个模拟令牌的时候,我们需要使用到另外一个重要的Win32函数DuplicateToken。顾名思义,该函数通过一个现有的令牌来“复制”一个令牌。DuplicateToken函数的定义如下面的代码片断所示。BOOL WINAPI DuplicateToken(
__in HANDLE ExistingTokenHandle,
__in SECURITY_IMPERSONATION_LEVEL ImpersonationLevel,
__out PHANDLE DuplicateTokenHandle
  从上面给出的DuplicateToken函数的定义我们可以看出:除了传入现有的访问令牌作为输入参数之外,还具有一个表示模拟级别的ImpersonationLevel的参数。模拟级别是一个非常重要的概念,它表示被复制的模拟令牌可以被使用的程度和访问。模拟等级通过如下所示的SECURITY_IMPERSONATION_LEVEL枚举表示。typedef enum _SECURITY_IMPERSONATION_LEVEL {
SecurityAnonymous,
SecurityIdentification,
SecurityImpersonation,
SecurityDelegation
} SECURITY_IMPERSONATION_LEVEL, *PSECURITY_IMPERSONATION_LEVEL;
  四个枚举项,SecurityAnonymous、SecurityIdentification、SecurityImpersonation和SecurityDelegation分别代表如下四种模拟的等级。 匿名(Anonymous):无法
有关客户端的标识信息,且无法模拟客户端; 识别(Identification):可以获取有关客户端的信息(如安全标识符和特权),
无法模拟客户端; 模拟(Impersonation):可以在本地模拟客户端的安全上下文。,但无法在远程系统上模拟客户端; 委托(Delegation):可以在本地和远程系统上模拟客户端的安全上下文。
  对于模拟级别,对于托管代码的应用编程接口中也具有一个匹配的枚举TokenImpersonationLevel。如下面的代码片断所示,除了上述的四个对应于具体模拟级别的枚举项之外,TokenImpersonationLevel还有一个额外的枚举值,表示具体的模拟级别上为指定。public enum TokenImpersonationLevel
Anonymous,
Identification,
Impersonation,
Delegation
}  二、 再谈WindowsIdentity
  关于模拟在托管代码的实现,我们不得不提我们之前已经介绍过的类型WindowsIdentity。从某种意义上讲,一个WindowsIdentity对象可以看成是对一个访问令牌的封装。WindowsIdentity直接为我们提供了模拟的功能。从下面给出的WindowsIdentity部分成员定义可以看到,它具有一个IntPtr类型的只读属性Token,实际上代表的就是我们上面介绍的访问令牌。而我们可以通过直接指定这个访问令牌创建一个WindowsIdentity对象。ImpersonationLevel表示访问令牌的模拟级别。public class WindowsIdentity : IIdentity,...
//其他成员&
public WindowsIdentity(IntPtr userToken);
public virtual IntPtr Token { }
public TokenImpersonationLevel ImpersonationLevel { }
public virtual WindowsImpersonationContext Impersonate();
public static WindowsImpersonationContext Impersonate(IntPtr userToken);
  对应一个现有的WindowsIdentity对象,只要其访问令牌的模拟级别为Impersonation或者Delegation,我们就能调用Impersonate方法模拟这个身份。此外WindowsIdentity还提供了静态的Impersonate是我们可以直接根绝一个访问令牌实施身份模式。一旦Impersonate方法被调用,基于被模拟身份的安全上下文会自动附加到当前线程。Impersonate方法返回的是一个WindowsImpersonationContext对象。如果需要将安全上下文恢复到模拟之前的状态,可以调用WindowsImpersonationContext的Undo方法。而WindowsImpersonationContext实现了IDisposable接口,Undo方法实际上也会在Dispose方法中被调用。WindowsImpersonationContext定义如下。public class WindowsImpersonationContext : IDisposable
public void Dispose();
public void Undo();
  一般来说,只有某些特殊的操作(比如访问一个受权限控制的文件)才需要在被模拟的身份下执行。当这些操作执行完毕或者在执行过程中抛出异常,我们都需要恢复线程安全上下文到被模式之前的状态。正确的模拟编程应该采用如下的方式。WindowsImpersonationContext impersonationContext = identity.Impersonate();
//在模拟身份下执行的操作&
catch (Exception ex)
&//异常处理&
impersonationContext.Undo();
  或者:using (WindowsImpersonationContext impersonationContext = identity.Impersonate())
//在模拟身份下执行的操作
  有一点需要注意的是:无论WindowsIdentity对象的模拟级别是什么,调用Impersonate方法都不会抛出异常。但是,只有当模拟级别为Imperation或者Delegation的情况下,采用真正使用被模拟的身份进行安全资源的访问。  三、实例演示:通过身份模拟的方式读取文件
  为了让读者对身份模式的作用和实现具有一个深刻的,我们来演示一个简单的实例。在这个实例中,我们将通过ACL设置一个文件的读取权限,演示针对不同Windows帐号进行模拟的情况下,是否能够正常读取该文件。
我们需要创建了两个本机的Windows帐户Foo和Bar(密码为Password)。然后你在某个公共的目录下(比如D:\盘)创建一个简单的文本(比如impersonationTest.txt)。然后赋予帐号Foo对该文件的读取权限,但拒绝帐号Bar读取该文件。
  然后我们创建一个简单的控制台应用作为演示程序。在默认创建的Program类中,定义如下一个CreateWindowsIdentity静态方法。该方法通过输入用户名、密码和模拟级别创建相应的WindowsIdentity。在CreateWindowsIdentity方法内部实际上是直接调用了上面介绍的两个Win32函数LogonUser和DuplicateToken。class Program
//其他成员
public const int LOGON32_PROVIDER_DEFAULT = 0;
public const int LOGON32_LOGON_INTERACTIVE = 2;
[DllImport(&advapi32.dll&, SetLastError = true)]
  public static extern bool LogonUser(string userName, string domainName, string password, int logonType, int loggonProvider, ref IntPtr
[DllImport(&advapi32.dll&, CharSet = CharSet.Auto, SetLastError = true)]
  public extern static bool DuplicateToken(IntPtr existingToken, int imperonationLevel, ref IntPtr newToken);
public static WindowsIdentity CreateWindowsIdentity(string userName, string password, TokenImpersonationLevel tokenImpersonationLevel)
IntPtr token = IntPtr.Z
IntPtr duplicateToken = IntPtr.Z
if (LogonUser(userName, string.Empty, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref token))
int impersonationL
switch (tokenImpersonationLevel)
case TokenImpersonationLevel.Anonymous:
{ impersonationLevel = 0; }
case TokenImpersonationLevel.Impersonation:
{ impersonationLevel = 2; }
case TokenImpersonationLevel.Delegation:
{ impersonationLevel = 3; }
{ impersonationLevel = 1; }
if (DuplicateToken(token, impersonationLevel, ref duplicateToken))
return new WindowsIdentity(duplicateToken);
throw new InvalidOperationException(string.Format(&创建模拟令牌失败 (错误代码: {0}) &, Marshal.GetLastWin32Error()));
throw new InvalidOperationException(string.Format(&用户登录失败 (错误代码: {0}) &, Marshal.GetLastWin32Error()));
  然后我们定义如下一个静态的ReadFile方法。在这个方法中,我们根据传入的用户名和密码调用上述的CreateWindowsIdentity方法创建相应的WindowsIdentity。然后模拟该用户进行文件的读取。在成功读取和抛出异常的情况下分别输出相应的指示性文字。在Main方法中,分别传入传入账号Foo和Bar以及相应的密码对该方法进行调用。从输出的结果可以看出,在模拟帐号Foo时,文件被成功读取,而在模拟帐号Bar的时候却失败了。这和测试文件的ACL设置时一致的。public static void ReadFile(string userName, string password)
WindowsIdentity identity = CreateWindowsIdentity(userName, password, TokenImpersonationLevel.Impersonation);
using (WindowsImpersonationContext context = identity.Impersonate())
Console.WriteLine(&当前用为:{0}&, WindowsIdentity.GetCurrent().Name);
File.ReadAllText(&D:\\impersonationTest.txt&);
Console.WriteLine(&成功读取文件内容...&);
Console.WriteLine(&读取文件失败...&);
static void Main(string[] args)
ReadFile(&Foo&, &Password&);
ReadFile(&Bar&, &Password&);
  输出结果(Jinnan-PC为我本机的机器名):当前用户为:Jinnan-PC\Foo
成功读取文件内容...
当前用户为:Jinnan-PC\Bar
读取文件失败...&
本站所有文章全部来源于互联网,版权归属于原作者。本站所有转载文章言论不代表本站观点,如是侵犯了原作者的权利请发邮件联系站长(yanjing@),我们收到后立即删除。
当日送达服务
摘要: 据国外媒体报道,波士顿咨询公司(BCG)周二发布的最新报告显示,虽然同日送达服务已经成为电子商务领域最热门的趋势之一,但对于大多数美国消费者而言,这项服务过于昂贵,这使 & 据国外媒体报道,波士顿咨询公司(BCG)周二发布的最新报告显示,虽然同日送达服务已经成为电子商务领域最热门的趋势之一,但对于大多数美国消费者而言,这项服务过于昂贵,这使得同日送达有可能成为网购时代的又一...
摘要: 兵马未动,粮草先行。继2月21日为公司更名,并就年度计划、经营策略、组织架构、人员任命进行多项部署后,张近东在即将召开的2013年两会上也准备了充足的弹药。 张近东是全国政 兵马未动,粮草先行。继2月21日为公司更名,并就年度计划、经营策略、组织架构、人员任命进行多项部署后,张近东在即将召开的2013年两会上也准备了充足的“弹药”。 张近东是全国政协委员、苏宁云商集团股份有限公司(0...
在市场经济告诉发展的今天,因为互联网的诞生造就了很多的草根逆袭的人。互联网创业也已经成为一个时代的潮流,非常的的人借助互联网完成了自己的梦想,就拿东莞市末班车网络科技有限公司来说,就帮助了几万的普通职业者完成了人生华丽的转身。其CEO莫海军就是一个同过互联网创业的草根创业者,3年达到2.55亿的销售额,不的不说,这又是互联网创业实现的一个奇迹。 我们今天非常荣幸请到了东莞市末班车网络科技有限...
摘要: 尽管超极本问世已经两年多时间,但超极本市场一直都不温不火,这让一直唱多超极本的英特尔中国区总裁杨叙感到不轻松。 在日前于深圳举办的“第三届英特尔产业创新峰会”上,杨 &   尽管超极本问世已经两年多时间,但超极本市场一直都不温不火,这让一直唱多超极本的英特尔中国区总裁杨叙感到不轻松。   在日前于深圳举办的“第三届英特尔产业创新峰会”上,杨叙在接受南都记者专访时承认,超极本...
摘要: 尽管超极本问世已经两年多时间,但超极本市场一直都不温不火,这让一直唱多超极本的英特尔中国区总裁杨叙感到不轻松。 在日前于深圳举办的“第三届英特尔产业创新峰会”上,杨   尽管超极本问世已经两年多时间,但超极本市场一直都不温不火,这让一直唱多超极本的英特尔中国区总裁杨叙感到不轻松。   在日前于深圳举办的“第三届英特尔产业创新峰会”上,杨叙在接受南都记者专访时承认,超极本并没有取得预期...
摘要: 南都漫画:张建辉 新旧媒体在对抗中启动吸金磨盘 央视欲发力全媒体经营、人人网等社交阵营主打互动营销 伦敦奥运会已进入百日冲刺阶段倒计时100天,体育盛会的吸金磨盘再次转动 & & 南都漫画:张建辉 新旧媒体在对抗中启动吸金磨盘 央视欲发力全媒体经营、人人网等社交阵营主打“互动营销” 伦敦奥运会已进入“百日冲刺”阶段———倒计时100天,体育盛会的吸金磨盘再次转动。...
行业架构师咨询
服务与支持
账号与支持
关注阿里云
International

我要回帖

更多关于 windows 7 的文章

 

随机推荐