客户端模拟

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

server impersonates a calling client when making subsequent calls on the client's behalf

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

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

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

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

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

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

注意

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