Client-Identität (Autorisierung)

„Impersonation“ (Identitätswechsel) ist die Fähigkeit eines Threads, mit anderen Sicherheitsinformationen auszuführen als der Prozess, dem der Thread gehört. Normalerweise gibt sich ein Thread in einer Serveranwendung als Client aus. Dies ermöglicht es dem Server-Thread, im Namen dieses Clients zu handeln, um auf Objekte auf dem Server zuzugreifen oder den Zugriff auf die eigenen Objekte des Clients zu überprüfen.

Die Microsoft Windows API bietet die folgenden Funktionen, um eine Imitation zu starten:

  • Eine DDE-Server-Anwendung kann die Funktion DdeImpersonateClient aufrufen, um einen Client zu imitieren.
  • Ein Named-Pipe-Server kann die Funktion ImpersonateNamedPipeClient aufrufen.
  • Sie können die Funktion ImpersonateLoggedOnUser aufrufen, um den Sicherheitskontext des Zugriffstokens eines angemeldeten Benutzers zu imitieren.
  • Die Funktion ImpersonateSelf ermöglicht es einem Thread, eine Kopie seines eigenen Zugriffstokens zu erzeugen. Dies ist nützlich, wenn eine Anwendung den Sicherheitskontext eines einzelnen Threads ändern muss. Zum Beispiel muss manchmal nur ein Thread eines Prozesses ein Privileg aktivieren.
  • Sie können die Funktion SetThreadToken aufrufen, um zu bewirken, dass der Ziel-Thread im Sicherheitskontext eines angegebenen Identitätstokens läuft.
  • Eine Microsoft Remote Procedure Call (RPC) Serveranwendung kann die Funktion RpcImpersonateClient aufrufen, um einen Client zu imitieren.
  • Ein Sicherheitspaket oder ein Anwendungsserver kann die Funktion ImpersonateSecurityContext aufrufen, um einen Client zu imitieren.

Bei den meisten dieser „Impersonations“ (Identitätswechsel) kann der imitierende Thread zu seinem eigenen Sicherheitskontext zurückkehren, indem er die Funktion RevertToSelf aufruft. Die Ausnahme ist die RPC-Impersonation (Identitätswechsel), bei der die RPC-Serveranwendung RpcRevertToSelf oder RpcRevertToSelfEx aufruft, um zu ihrem eigenen Sicherheitskontext zurückzukehren.

Hinweis: Wenn Sie einen Benutzer von einem Win32-Dienst aus verkörpern und APIs aufrufen, die sich auf Benutzerumgebungsvariablen verlassen, müssen Sie möglicherweise RegDisablePredefinedCache aufrufen, bevor Sie die Verkörperung durchführen.