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 |
---|---|
|
Das an die Funktion übergebene Handle ist ungültig. |
|
Der Client konnte nicht identitätswechseln. |
|
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.
- 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: 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 |