客户端模拟

当服务器必须将客户端请求传递给其他服务器进程或操作系统时,模拟在分布式计算环境中非常有用。 在这种情况下,服务器模拟客户端的安全上下文。 然后,其他服务器进程可以处理请求,就像原始客户端发出请求一样。

服务器在代表客户端进行后续调用时模拟调用客户端

例如,客户端向服务器 A 发出请求。如果服务器 A 必须查询服务器 B 以完成请求,服务器 A 将模拟客户端安全上下文,并代表客户端向服务器 B 发出请求。 服务器 B 使用原始客户端的安全上下文而不是服务器 A 的安全标识来确定是否完成任务。

服务器调用 RpcImpersonateClient 以使用客户端安全上下文覆盖服务器线程的安全性。 任务完成后,服务器调用 RpcRevertToSelfRpcRevertToSelfEx 来还原为服务器线程定义的安全上下文。

绑定时,客户端可以指定有关安全性的服务质量信息,以指定服务器如何模拟客户端。 例如,其中一个设置允许客户端指定不允许服务器模拟它。 有关详细信息,请参阅服务质量

模拟原始客户端时调用其他服务器的功能称为 委派。 使用委派时,模拟客户端的服务器可以调用另一台服务器,并且可以使用客户端的凭据进行网络调用。 也就是说,从第二个服务器的角度来看,来自第一个服务器的请求与来自客户端的请求是无法区分的。 并非所有安全提供程序都支持委派。 Microsoft 仅提供一个支持委派的安全提供程序:Kerberos。

由于客户端在远程过程调用期间授予服务器的权限,委派可能是一项危险的功能。 这就是为什么 Kerberos 仅当请求相互身份验证时,才允许使用模拟委派级别的调用。 域管理员可以限制进行具有委派模拟级别的调用的计算机,以防止不知情的客户端调用可能滥用其凭据的服务器。

委派规则存在一个例外:使用 ncalrpc 的调用。 进行这些调用时,即使指定了模拟级别的模拟,服务器也会获得委派权限。 也就是说,服务器可以代表客户端调用其他服务器。 这仅适用于一个远程调用。 例如,如果客户端 A 使用 ncalrpc 本地服务器 LB 调用本地服务器 LB,则可以模拟并调用远程服务器 RB。 RB 将能够代表客户端 A 执行操作,但只能在运行 RB 的远程计算机上执行操作。 它无法对远程计算机 C 进行另一次网络调用,除非 LB 在调用 RB 时指定了代理的模拟级别。

注意

术语 模拟 表示两个重叠的含义。 模拟的第一个含义是代表客户执行操作的一般过程。 第二种含义是称为模拟的特定模拟级别。 文本的上下文通常阐明了含义。