Jetons d’assistance pour les tâches de transfert BITS

dans Windows Vista, le Service Service de transfert intelligent en arrière-plan (BITS) permet à une application d’associer un jeton de sécurité unique à une tâche de transfert BITS. La tâche de transfert BITS utilise ensuite ce jeton pour l’authentification et l’accès aux ressources locales et distantes.

dans Windows 7, le service bits associe un jeton supplémentaire à une tâche de transfert bits. La tâche de transfert BITS peut être configurée avec un jeton de sécurité supplémentaire, qui est un jeton d’emprunt d’identité créé par une application appelant l’API COM BITS. Ce modèle de jeton d’assistance permet aux applications d’utiliser simultanément deux jetons de sécurité différents pour accéder à des fichiers locaux, à des certificats côté client, à des fichiers distants et à des proxies. Par exemple, une tâche de transfert BITS est créée, qui écrit les données téléchargées dans un répertoire local privilégié, puis présente une identité de domaine à faibles privilèges pour le serveur HTTP et le serveur proxy.

une application, généralement un service de Windows, spécifie un jeton d’assistance à l’aide de la nouvelle interface IBitsTokenOptions. Cette interface est implémentée par l’objet de traitement BITS. L’application appelle méthode ibackgroundcopyjob :: QueryInterface pour recevoir le pointeur d’interface. L’application emprunte l’identité de l’identité de l’assistance et appelle IBitsTokenOptions :: SetHelperToken pour transmettre le jeton au service bits. L’application spécifie ensuite les ressources auxquelles le jeton s’applique en passant un jeu d’indicateurs binaires à l’aide de IBitsTokenOptions :: SetHelperTokenFlags. L’application efface tous les indicateurs (à l’aide de SetHelperTokenFlags ) pour rétablir le comportement. Le service BITS stocke les indicateurs de bits et le jeton dans la tâche de transfert BITS.

Lorsque le propriétaire des tâches de transfert BITS se déconnecte, le service BITS ignore les jetons d’assistance associés à la tâche de transfert. Si le transfert n’est pas terminé, le service BITS place le travail dans un état d’erreur avec le code d’erreur BG _ E _ Token _ requis et ignore le jeton d’assistance. L’application cliente peut actualiser le jeton en appelant IBitsTokenOptions :: SetHelperToken et peut ensuite reprendre la tâche de transfert bits. L’application cliente peut également effacer les indicateurs de jeton d’assistance à l’aide de IBitsTokenOptions :: SetHelperTokenFlags , puis reprendre la tâche de transfert sans jeton d’assistance.

De même, lorsque le propriétaire d’une session des services Terminal Server se déconnecte, le service BITS doit supprimer tous les jetons d’assistance de cette session et placer les tâches de transfert affectées dans un état d’erreur avec le code d’erreur BG _ E _ Token _ requis .

Le modèle de jeton d’assistance nécessite une modification de la stratégie de contrôle d’accès BITS. Les versions précédentes de BITS implémentaient des contrôles d’accès à chaque appel de méthode. à partir de Windows 7, la vérification d’accès doit être effectuée à l’intérieur de l’appel méthode ibackgroundcopyjob :: QueryInterface ; dans le cas contraire, le jeton d’assistance peut ne pas avoir accès à la tâche de transfert.

Notes

Les implémentations plus anciennes nécessitaient efficacement que les utilisateurs du service BITS disposent de privilèges d’administrateur pour définir des jetons d’assistance. à compter de Windows 10, la version 1607, les BITS non-administrateurs peuvent utiliser IBitsTokenOptions :: SetHelperToken pour définir des jetons d’assistance non-administrateur sur les travaux BITS qu’ils possèdent. Cette modification permet aux utilisateurs non-administrateurs BITS (tels que les services de téléchargeur en arrière-plan s’exécutant sous le compte NetworkService) de définir des jetons d’assistance.

Plus précisément, l’implémentation a été modifiée pour permettre aux utilisateurs dépourvus de privilèges d’administrateur de définir des jetons d’assistance, à condition que les conditions suivantes soient remplies :

IBitsTokenOptions