Freigeben über


ImpersonateSecurityContext-Funktion (sspi.h)

Die ImpersonateSecurityContext-Funktion ermöglicht es einem Server, die Identität eines Clients mithilfe eines Tokens anzunehmen, das zuvor durch einen Aufruf von AcceptSecurityContext (General) oder QuerySecurityContextToken abgerufen wurde. Diese Funktion ermöglicht es dem Anwendungsserver, als Client zu fungieren, sodass alle erforderlichen Zugriffssteuerungen erzwungen werden.

Syntax

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

Parameter

[in] phContext

Das Handle des Kontexts, der identitätswechselt werden soll. Dieses Handle muss durch einen Aufruf der AcceptSecurityContext (General) -Funktion abgerufen worden sein.

Rückgabewert

Wenn die Funktion erfolgreich ist, gibt die Funktion SEC_E_OK zurück.

Wenn die Funktion fehlschlägt, wird der folgende Fehlercode zurückgegeben.

Rückgabecode Beschreibung
SEC_E_INVALID_HANDLE
Das an die Funktion übergebene Handle ist ungültig.
SEC_E_NO_IMPERSONATION
Der Client konnte nicht identitätswechseln.
SEC_E_UNSUPPORTED_FUNCTION
Dieser Wert wird vom Schannel-Kernelmodus zurückgegeben, um anzugeben, dass diese Funktion nicht unterstützt wird.

Hinweise

Die Serveranwendung ruft die ImpersonateSecurityContext-Funktion auf, wenn sie die Identität des Clients annehmen muss. Zuvor muss der Server ein gültiges Kontexthandle erhalten haben. Um das Kontexthandle abzurufen, muss der Server AcceptSecurityContext (Allgemein) aufrufen, um das eingehende Sicherheitstoken des Clients an das Sicherheitssystem zu übermitteln. Der Server ruft ein Kontexthandle ab, wenn der eingehende Kontext überprüft wird. Die Funktion erstellt ein Identitätswechseltoken und ermöglicht die Ausführung des Threads oder Prozesses mit dem Identitätswechselkontext.

Wenn Sie den Schannel Security Support Provider (SSP) verwenden, muss die Serveranwendung beim Aufrufen von AcceptSecurityContext (General) das ASC_REQ_MUTUAL_AUTH-Flag übergeben. Dadurch wird sichergestellt, dass der Client während des SSL/TLS-Handshakes nach einem Clientzertifikat gefragt wird. Wenn ein Clientzertifikat empfangen wird, überprüft das Schannel-Paket das Clientzertifikat und versucht, es einem Benutzerkonto zuzuordnen. Wenn diese Zuordnung erfolgreich ist, wird ein Clientbenutzertoken erstellt, und diese Funktion ist erfolgreich.

Der Anwendungsserver muss die RevertSecurityContext-Funktion aufrufen, wenn sie abgeschlossen ist oder wenn sie einen eigenen Sicherheitskontext wiederherstellen muss.

ImpersonateSecurityContext ist nicht für alle Sicherheitspakete auf allen Plattformen verfügbar. In der Regel wird es nur auf Plattformen und mit Sicherheitspaketen implementiert, die den Identitätswechsel unterstützen. Rufen Sie die Funktion QuerySecurityPackageInfo auf, um zu erfahren, ob ein Sicherheitspaket den Identitätswechsel unterstützt.

Hinweis Wenn die ImpersonateSecurityContext-Funktion fehlschlägt, wird der Client nicht imItiert, und alle nachfolgenden Clientanforderungen werden im Sicherheitskontext des Prozesses gesendet, der die Funktion aufgerufen hat. Wenn der aufrufende Prozess als privilegiertes Konto ausgeführt wird, kann er Aktionen ausführen, die der Client nicht ausführen darf. Um Sicherheitsrisiken zu vermeiden, sollte der aufrufende Prozess immer den Rückgabewert überprüfen. Wenn der Rückgabewert angibt, dass der Funktionsaufruf fehlgeschlagen ist, sollten keine Clientanforderungen ausgeführt werden.
 
Alle Identitätswechselfunktionen, einschließlich ImpersonateSecurityContext , lassen den angeforderten Identitätswechsel zu, wenn eine der folgenden Punkte zutrifft:
  • Die angeforderte Identitätswechselebene des Tokens ist kleiner als SecurityImpersonation, z. B. SecurityIdentification oder SecurityAnonymous.
  • Der Aufrufer verfügt über die Berechtigung SeImpersonatePrivilege .
  • Ein Prozess (oder ein anderer Prozess in der Anmeldesitzung des Aufrufers) hat das Token mithilfe expliziter Anmeldeinformationen über die LogonUser - oder LsaLogonUser-Funktion erstellt.
  • Die authentifizierte Identität ist identisch mit dem Aufrufer.
Windows XP mit SP1 und früher: Die SeImpersonatePrivilege-Berechtigung wird nicht unterstützt.

Windows XP: Die SeImpersonatePrivilege-Berechtigung wird erst unter Windows XP mit Service Pack 2 (SP2) unterstützt.

Anforderungen

   
Unterstützte Mindestversion (Client) Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile sspi.h (einschließlich Security.h)
Bibliothek Secur32.lib
DLL Secur32.dll

Weitere Informationen

AcceptSecurityContext (Allgemein)

QuerySecurityPackageInfo

RevertSecurityContext

SSPI-Funktionen