Funzione ImpersonateSecurityContext (sspi.h)

La funzione ImpersonateSecurityContext consente a un server di rappresentare un client usando un token ottenuto in precedenza da una chiamata a AcceptSecurityContext (Generale) o QuerySecurityContextToken. Questa funzione consente al server applicazioni di agire come client e quindi vengono applicati tutti i controlli di accesso necessari.

Sintassi

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

Parametri

[in] phContext

Handle del contesto da rappresentare. Questo handle deve essere stato ottenuto da una chiamata alla funzione AcceptSecurityContext (General).

Valore restituito

Se la funzione ha esito positivo, la funzione restituisce SEC_E_OK.

Se la funzione ha esito negativo, restituisce il codice di errore seguente.

Codice restituito Descrizione
SEC_E_INVALID_HANDLE
L'handle passato alla funzione non è valido.
SEC_E_NO_IMPERSONATION
Impossibile rappresentare il client.
SEC_E_UNSUPPORTED_FUNCTION
Questo valore viene restituito dalla modalità kernel Schannel per indicare che questa funzione non è supportata.

Commenti

L'applicazione server chiama la funzione ImpersonateSecurityContext quando deve rappresentare il client. Prima di eseguire questa operazione, il server deve avere ottenuto un handle di contesto valido. Per ottenere l'handle di contesto, il server deve chiamare AcceptSecurityContext (Generale) per inviare il token di sicurezza in ingresso del client al sistema di sicurezza. Il server ottiene un handle di contesto se il contesto in ingresso viene convalidato. La funzione crea un token di rappresentazione e consente l'esecuzione del thread o del processo con il contesto di rappresentazione.

Quando si usa il provider di supporto per la sicurezza SCHANNEL, l'applicazione server deve passare il flag di ASC_REQ_MUTUAL_AUTH quando si chiama AcceptSecurityContext (Generale). Ciò garantisce che al client venga richiesto un certificato client durante l'handshake SSL/TLS. Quando viene ricevuto un certificato client, il pacchetto Schannel verifica il certificato client e tenta di eseguirne il mapping a un account utente. Quando il mapping ha esito positivo, viene creato un token utente client e questa funzione ha esito positivo.

Il server applicazioni deve chiamare la funzione RevertSecurityContext al termine o quando deve ripristinare il proprio contesto di sicurezza.

ImpersonateSecurityContext non è disponibile con tutti i pacchetti di sicurezza in tutte le piattaforme. In genere, viene implementato solo su piattaforme e con pacchetti di sicurezza che supportano la rappresentazione. Per sapere se un pacchetto di sicurezza supporta la rappresentazione, chiamare la funzione QuerySecurityPackageInfo .

Nota Se la funzione ImpersonateSecurityContext ha esito negativo, il client non viene rappresentato e tutte le richieste client successive vengono effettuate nel contesto di sicurezza del processo che ha chiamato la funzione. Se il processo chiamante è in esecuzione come account con privilegi, può eseguire azioni che il client non può eseguire. Per evitare rischi per la sicurezza, il processo chiamante deve sempre controllare il valore restituito. Se il valore restituito indica che la chiamata di funzione non è riuscita, non deve essere eseguita alcuna richiesta client.
 
Tutte le funzioni di rappresentazione, inclusa ImpersonateSecurityContext , consentono la rappresentazione richiesta se una delle condizioni seguenti è vera:
  • Il livello di rappresentazione richiesto del token è minore di SecurityImpersonation, ad esempio SecurityIdentification o SecurityAnonymous.
  • Il chiamante ha il privilegio SeImpersonatePrivilege .
  • Un processo (o un altro processo nella sessione di accesso del chiamante) ha creato il token usando credenziali esplicite tramite la funzione LogonUser o LsaLogonUser .
  • L'identità autenticata corrisponde al chiamante.
Windows XP con SP1 e versioni precedenti: Il privilegio SeImpersonatePrivilege non è supportato.

Windows XP: Il privilegio SeImpersonatePrivilege non è supportato fino a quando Windows XP con Service Pack 2 (SP2).

Requisiti

   
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione sspi.h (include Security.h)
Libreria Secur32.lib
DLL Secur32.dll

Vedi anche

AcceptSecurityContext (Generale)

QuerySecurityPackageInfo

RevertSecurityContext

Funzioni SSPI