用户模拟(Impersonation)是自从Windows 2000时引入的强大的功能。Windows系统甚至允许用户模拟(Impersonation)被用在客户端/服务端的编程模型里面。
在传统模式下,比如一个远程服务器可以提供文件、打印机或者数据库服务,希望使用这些资源的客户端可以发送一个请求给远程服务器,这时候,远程服务器必须要确保客户端有权限来访问它请求的资源,于是远程服务器查询用户的帐号和组信息,然后查询资源的安全描述符来判断资源访问是否被允许。这个过程需要大量的编码,并且非常容易出错,而且也不能自动整合后续版本操作系统带来的新的安全特性。因此Windows 2000起,我们可以使用用户模拟(Impersonation)来简化这个问题—比如IIS里面就使用到了用户模拟(Impersonation)功能。
比如,我们在局域网里面新建了一个网站,局域网用户可以使用这个网站上传自己的图片,编辑自己的文件,并且可以跟自己的好友共享这些图片和文件。网站使用Windows验证方式,这样就省去了局域网用户登录网站的麻烦。就是说如果用户打开IE访问网站的时候,直接就获得了相应的访问权限—这也是SharePoint Server使用的用户身份验证方式。另外在设计的时候,为了得到更大的可扩展性,图片和文件不是保存在数据库里面的,而是直接保存在文件系统(也许是分布式文件系统)里面的。也即是说,当新建了一个用户A的时候,
1. 网站就在域里面新建一个用户A,还创建了一个用户组A’s Friend—用来保存用户