Função ImpersonateSecurityContext (sspi.h)

A função ImpersonateSecurityContext permite que um servidor represente um cliente usando um token obtido anteriormente por uma chamada para AcceptSecurityContext (Geral) ou QuerySecurityContextToken. Essa função permite que o servidor de aplicativos atue como o cliente e, portanto, todos os controles de acesso necessários são impostos.

Sintaxe

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

Parâmetros

[in] phContext

O identificador do contexto a ser representado. Esse identificador deve ter sido obtido por uma chamada para a função AcceptSecurityContext (Geral ).

Valor retornado

Se a função for bem-sucedida, a função retornará SEC_E_OK.

Se a função falhar, ela retornará o código de erro a seguir.

Código de retorno Descrição
SEC_E_INVALID_HANDLE
O identificador passado para a função não é válido.
SEC_E_NO_IMPERSONATION
Não foi possível representar o cliente.
SEC_E_UNSUPPORTED_FUNCTION
Esse valor é retornado pelo modo kernel Schannel para indicar que essa função não tem suporte.

Comentários

O aplicativo de servidor chama a função ImpersonateSecurityContext quando precisa representar o cliente. Antes de fazer isso, o servidor deve ter obtido um identificador de contexto válido. Para obter o identificador de contexto, o servidor deve chamar AcceptSecurityContext (Geral) para enviar o token de segurança de entrada do cliente para o sistema de segurança. O servidor obterá um identificador de contexto se o contexto de entrada for validado. A função cria um token de representação e permite que o thread ou processo seja executado com o contexto de representação.

Ao usar o SSP ( provedor de suporte de segurança ) do Schannel, o aplicativo de servidor deve passar o sinalizador ASC_REQ_MUTUAL_AUTH ao chamar AcceptSecurityContext (Geral). Isso garante que o cliente seja solicitado a fornecer um certificado de cliente durante o handshake SSL/TLS. Quando um certificado de cliente é recebido, o pacote Schannel verifica o certificado do cliente e tenta mapeá-lo para uma conta de usuário. Quando esse mapeamento é bem-sucedido, um token de usuário cliente é criado e essa função é bem-sucedida.

O servidor de aplicativos deve chamar a função RevertSecurityContext quando for concluída ou quando precisar restaurar seu próprio contexto de segurança.

ImpersonateSecurityContext não está disponível com todos os pacotes de segurança em todas as plataformas. Normalmente, ele é implementado apenas em plataformas e com pacotes de segurança que dão suporte à representação. Para saber se um pacote de segurança dá suporte à representação, chame a função QuerySecurityPackageInfo .

Nota Se a função ImpersonateSecurityContext falhar, o cliente não será representado e todas as solicitações de cliente subsequentes serão feitas no contexto de segurança do processo que chamou a função. Se o processo de chamada estiver em execução como uma conta privilegiada, ele poderá executar ações que o cliente não teria permissão para executar. Para evitar riscos de segurança, o processo de chamada deve sempre marcar o valor retornado. Se o valor retornado indicar que a chamada de função falhou, nenhuma solicitação de cliente deverá ser executada.
 
Todas as funções de representação, incluindo ImpersonateSecurityContext , permitem a representação solicitada se uma das seguintes funções for verdadeira:
  • O nível de representação solicitado do token é menor que SecurityImpersonation, como SecurityIdentification ou SecurityAnonymous.
  • O chamador tem o privilégio SeImpersonatePrivilege .
  • Um processo (ou outro processo na sessão de logon do chamador) criou o token usando credenciais explícitas por meio da função LogonUser ou LsaLogonUser .
  • A identidade autenticada é a mesma que o chamador.
Windows XP com SP1 e versões anteriores: Não há suporte para o privilégio SeImpersonatePrivilege .

Windows XP: O privilégio SeImpersonatePrivilege não tem suporte até o Windows XP com Service Pack 2 (SP2).

Requisitos

   
Cliente mínimo com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho sspi.h (inclua Security.h)
Biblioteca Secur32.lib
DLL Secur32.dll

Confira também

AcceptSecurityContext (Geral)

QuerySecurityPackageInfo

RevertSecurityContext

Funções SSPI