Función ImpersonateSecurityContext (sspi.h)

La función ImpersonateSecurityContext permite a un servidor suplantar a un cliente mediante un token obtenido previamente por una llamada a AcceptSecurityContext (General) o QuerySecurityContextToken. Esta función permite que el servidor de aplicaciones actúe como cliente y, por tanto, se aplican todos los controles de acceso necesarios.

Sintaxis

KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY ImpersonateSecurityContext(
  [in] PCtxtHandle phContext
);

Parámetros

[in] phContext

Identificador del contexto que se va a suplantar. Este identificador debe haberse obtenido mediante una llamada a la función AcceptSecurityContext (General).

Valor devuelto

Si la función se ejecuta correctamente, la función devuelve SEC_E_OK.

Si se produce un error en la función, devuelve el código de error siguiente.

Código devuelto Descripción
SEC_E_INVALID_HANDLE
El identificador pasado a la función no es válido.
SEC_E_NO_IMPERSONATION
No se pudo suplantar al cliente.
SEC_E_UNSUPPORTED_FUNCTION
El modo kernel de Schannel devuelve este valor para indicar que esta función no es compatible.

Comentarios

La aplicación de servidor llama a la función ImpersonateSecurityContext cuando necesita suplantar al cliente. Antes de hacerlo, el servidor debe haber obtenido un identificador de contexto válido. Para obtener el identificador de contexto, el servidor debe llamar a AcceptSecurityContext (General) para enviar el token de seguridad entrante del cliente al sistema de seguridad. El servidor obtiene un identificador de contexto si se valida el contexto de entrada. La función crea un token de suplantación y permite que el subproceso o el proceso se ejecuten con el contexto de suplantación.

Cuando se usa el proveedor de compatibilidad de seguridad de Schannel (SSP), la aplicación de servidor debe pasar la marca de ASC_REQ_MUTUAL_AUTH al llamar a AcceptSecurityContext (General). Esto garantiza que el cliente se solicite un certificado de cliente durante el protocolo de enlace SSL/TLS. Cuando se recibe un certificado de cliente, el paquete Schannel comprueba el certificado de cliente e intenta asignarlo a una cuenta de usuario. Cuando esta asignación se realiza correctamente, se crea un token de usuario cliente y esta función se realiza correctamente.

El servidor de aplicaciones debe llamar a la función RevertSecurityContext cuando termine o cuando necesite restaurar su propio contexto de seguridad.

ImpersonateSecurityContext no está disponible con todos los paquetes de seguridad en todas las plataformas. Normalmente, solo se implementa en plataformas y con paquetes de seguridad que admiten la suplantación. Para saber si un paquete de seguridad admite la suplantación, llame a la función QuerySecurityPackageInfo .

Nota Si se produce un error en la función ImpersonateSecurityContext , el cliente no se suplanta y todas las solicitudes de cliente posteriores se realizan en el contexto de seguridad del proceso que llamó a la función. Si el proceso de llamada se ejecuta como una cuenta con privilegios, puede realizar acciones que el cliente no podría realizar. Para evitar riesgos de seguridad, el proceso de llamada siempre debe comprobar el valor devuelto. Si el valor devuelto indica que se produjo un error en la llamada de función, no se debe ejecutar ninguna solicitud de cliente.
 
Todas las funciones de suplantación, incluidas ImpersonateSecurityContext , permiten la suplantación solicitada si se cumple una de las siguientes condiciones:
  • El nivel de suplantación solicitado del token es menor que SecurityImpersonation, como SecurityIdentification o SecurityAnonymous.
  • El autor de la llamada tiene el privilegio SeImpersonatePrivilege .
  • Un proceso (u otro proceso en la sesión de inicio de sesión del autor de la llamada) creó el token mediante credenciales explícitas a través de la función LogonUser o LsaLogonUser .
  • La identidad autenticada es la misma que el autor de la llamada.
Windows XP con SP1 y versiones anteriores: No se admite el privilegio SeImpersonatePrivilege .

Windows XP: El privilegio SeImpersonatePrivilege no se admite hasta Windows XP con Service Pack 2 (SP2).

Requisitos

   
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado sspi.h (include Security.h)
Library Secur32.lib
Archivo DLL Secur32.dll

Consulte también

AcceptSecurityContext (General)

QuerySecurityPackageInfo

RevertSecurityContext

Funciones SSPI