Suplantación de cliente (autorización)

La suplantación es la capacidad de un subproceso para ejecutarse mediante información de seguridad diferente al proceso que posee el subproceso. Normalmente, un subproceso de una aplicación de servidor suplanta a un cliente. Esto permite que el subproceso del servidor actúe en nombre de ese cliente para acceder a objetos en el servidor o validar el acceso a los propios objetos del cliente.

La API de Microsoft Windows proporciona las siguientes funciones para iniciar una suplantación:

  • Una aplicación de servidor DDE puede llamar a la función DdeImpersonateClient para suplantar a un cliente.
  • Un servidor de canalización con nombre puede llamar a la función ImpersonateNamedPipeClient.
  • Puede llamar a la función ImpersonateLoggedOnUser para suplantar el contexto de seguridad de un token de acceso del usuario que ha iniciado sesión.
  • La función ImpersonateSelf permite a un subproceso generar una copia de su propio token de acceso. Esto resulta útil cuando una aplicación necesita cambiar el contexto de seguridad de un único subproceso. Por ejemplo, a veces solo un subproceso de un proceso debe habilitar un privilegio.
  • Puede llamar a la función SetThreadToken para que el subproceso de destino se ejecute en el contexto de seguridad de un token de suplantación especificado.
  • Una aplicación de servidor de llamada a procedimiento remoto (RPC) de Microsoft puede llamar a la función RpcImpersonateClient para suplantar a un cliente.
  • Un paquete de seguridad o servidor de aplicaciones puede llamar a la función ImpersonateSecurityContext para suplantar a un cliente.

Para la mayoría de estas suplantaciones, el subproceso de suplantación puede revertir a su propio contexto de seguridad llamando a la función RevertToSelf. La excepción es la suplantación de RPC, en la que la aplicación de servidor RPC llama a RpcRevertToSelf o RpcRevertToSelfEx para revertir a su propio contexto de seguridad.

Nota: si estás suplantando a un usuario desde un servicio Win32 y está llamando a las API que dependen de variables de entorno de usuario, es posible que tenga que llamar a RegDisablePredefinedCache antes de realizar la suplantación.