Hilfstoken für BITS-Übertragungsaufträge
In Windows Vista ermöglicht der BitS-Dienst (Background Intelligent Transfer Service) einer Anwendung das Zuordnen eines einzelnen Sicherheitstokens zu einem BITS-Übertragungsauftrag. Der BITS-Übertragungsauftrag verwendet dann dieses Token für die Authentifizierung und für den Zugriff auf lokale und Remoteressourcen.
In Windows 7 ordnet der BITS-Dienst einem BITS-Übertragungsauftrag ein zusätzliches Token zu. Der BITS-Übertragungsauftrag kann mit einem zusätzlichen Sicherheitstoken konfiguriert werden, bei dem es sich um ein Identitätswechseltoken handelt, das von einer Anwendung erstellt wird, die die BITS COM-API aufruft. Mit diesem Hilfstokenmodell können Anwendungen gleichzeitig zwei verschiedene Sicherheitstoken verwenden, um auf lokale Dateien, clientseitige Zertifikate, Remotedateien und Proxys zuzugreifen. Beispielsweise wird ein BITS-Übertragungsauftrag erstellt, der die heruntergeladenen Daten in ein privilegiertes lokales Verzeichnis schreibt und dann eine Domänenidentität mit niedriger Rechte auf den HTTP-Server und den Proxyserver darstellt.
Eine Anwendung, in der Regel ein Windows-Dienst, gibt ein Hilfstoken mithilfe der neuen Schnittstelle IBitsTokenOptionsan. Diese Schnittstelle wird vom BITS-Auftragsobjekt implementiert. Die Anwendung ruft IBackgroundCopyJob::QueryInterface auf, um den Schnittstellenzeiger abzurufen. Die Anwendung imitiert die Hilfsidentität und ruft IBitsTokenOptions::SetHelperToken auf, um das Token an den BITS-Dienst zu übergeben. Anschließend gibt die Anwendung die Ressourcen an, auf die das Token angewendet wird, indem eine Reihe von Bitflags mithilfe von IBitsTokenOptions::SetHelperTokenFlagsübergeben wird. Die Anwendung löscht alle Flags (mit SetHelperTokenFlags erneut), um das Verhalten wiederherzustellen. Der BITS-Dienst speichert die Bitkennzeichnungen und das Token im BITS-Übertragungsauftrag.
Wenn sich der Besitzer der BITS-Übertragungsaufträge abmeldet, verwirft der BITS-Dienst alle Hilfstoken, die dem Übertragungsauftrag zugeordnet sind. Wenn die Übertragung nicht abgeschlossen ist, platziert der BITS-Dienst den Auftrag in einem Fehlerzustand mit dem BG_E_TOKEN_REQUIRED Fehlercode und verwirft das Hilfstoken. Die Clientanwendung kann das Token aktualisieren, indem sie IBitsTokenOptions::SetHelperToken aufruft und dann den BITS-Übertragungsauftrag fortsetzen kann. Alternativ kann die Clientanwendung die Hilfstokenkennzeichnungen mithilfe von IBitsTokenOptions::SetHelperTokenFlags löschen und dann den Übertragungsauftrag ohne Hilfstoken fortsetzen.
Ebenso muss der BITS-Dienst, wenn sich der Besitzer einer Terminaldienstesitzung abmeldet, alle Hilfstoken aus dieser Sitzung verwerfen und die betroffenen Übertragungsaufträge in einen Fehlerzustand mit dem BG_E_TOKEN_REQUIRED Fehlercode platzieren.
Für das Hilfstokenmodell ist eine Änderung der BITS-Zugriffssteuerungsrichtlinie erforderlich. In früheren Versionen von BITS wurden Zugriffsprüfungen für jeden Methodenaufruf implementiert. Ab Windows 7 muss die Zugriffsüberprüfung innerhalb des IBackgroundCopyJob::QueryInterface Aufrufs ausgeführt werden; andernfalls hat das Hilfstoken möglicherweise keinen Zugriff auf den Übertragungsauftrag.
Anmerkung
Ältere Implementierungen erfordern effektiv, dass BITS-Benutzer über Administratorrechte verfügen, um Hilfstoken festzulegen. Ab Windows 10, Version 1607, können Nicht-Administrator-BITS-Benutzer IBitsTokenOptions::SetHelperToken verwenden, um Nicht-Administrator-Hilfstoken für BITS-Aufträge festzulegen, die sie besitzen. Diese Änderung ermöglicht Benutzern, die nicht administratorintern sind, BITS-Benutzer (z. B. Hintergrunddownloaderdienste, die unter dem NetworkService-Kontoausgeführt werden), Hilfstoken festzulegen.
Insbesondere wurde die Implementierung so geändert, dass Benutzer ohne Administratorrechte Hilfstoken festlegen können, sofern die folgenden Bedingungen erfüllt sind:
- während des IBackgroundCopyJob::QueryInterface Aufruf ist die SID des Threadtokens des Aufrufers identisch mit der SID des Benutzerkontos des Auftragsbesitzers und
- Wenn IBitsTokenOptions::SetHelperToken aufgerufen wird, hat das Hilfstoken nicht die Administrator-SID (DOMAIN_ALIAS_RID_ADMINS) aktiviert.
Verwandte Themen