Jetons d’assistance pour les travaux de transfert BITS

Dans Windows Vista, le service BITS (Background Intelligent Transfer Service) permet à une application d’associer un seul jeton de sécurité à un travail de transfert BITS. Le travail de transfert BITS utilise ensuite ce jeton pour l’authentification et pour l’accès aux ressources locales et distantes.

Dans Windows 7, le service BITS associe un jeton supplémentaire à un travail de transfert BITS. Le travail de transfert BITS peut être configuré 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 aux fichiers locaux, aux certificats côté client, aux fichiers distants et aux proxys. Par exemple, un travail de transfert BITS est créé qui écrit les données téléchargées dans un répertoire local privilégié, puis il présente une identité de domaine à faible droit au serveur HTTP et au serveur proxy.

Une application, généralement un service Windows, spécifie un jeton d’assistance à l’aide de la nouvelle interface IBitsTokenOptions. Cette interface est implémentée par l’objet de travail BITS. L’application appelle IBackgroundCopyJob::QueryInterface pour obtenir le pointeur d’interface. L’application emprunte l’identité de l’assistance et appelle IBitsTokenOptions::SetHelperToken pour passer le jeton au service BITS. Ensuite, l’application spécifie les ressources auxquelles le jeton s’applique en transmettant un ensemble d’indicateurs de bits à l’aide de IBitsTokenOptions::SetHelperTokenFlags. L’application efface tous les indicateurs (à l’aide de SetHelperTokenFlags à nouveau) pour rétablir le comportement. Le service BITS stocke les indicateurs de bits et le jeton dans le travail de transfert BITS.

Lorsque le propriétaire des travaux de transfert BITS se déconnecte, le service BITS ignore tous les jetons d’assistance associés au travail 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_REQUIRED et ignore le jeton d’assistance. L’application cliente peut actualiser le jeton en appelant IBitsTokenOptions::SetHelperToken , puis peut reprendre le travail de transfert BITS. L’application cliente peut également effacer les indicateurs de jeton d’assistance à l’aide de IBitsTokenOptions::SetHelperTokenFlags , puis reprendre le travail de transfert sans jeton d’assistance.

De même, lorsque le propriétaire d’une session de services Terminal Server se déconnecte, le service BITS doit ignorer tous les jetons d’assistance de cette session et placer les travaux de transfert affectés dans un état d’erreur avec le code d’erreur BG_E_TOKEN_REQUIRED .

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émentent des vérifications d’accès sur chaque appel de méthode. À compter de Windows 7, le case activée d’accès doit être effectué à l’intérieur de l’appel IBackgroundCopyJob::QueryInterface ; sinon, le jeton d’assistance risque de ne pas avoir accès au travail de transfert.

Notes

Les implémentations plus anciennes devaient effectivement que les utilisateurs BITS disposent de privilèges d’administrateur pour définir des jetons d’assistance. À compter de Windows 10, version 1607, les utilisateurs BITS non-administrateur 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 BITS non-administrateurs (tels que les services de téléchargement 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 sans privilèges d’administrateur de définir des jetons d’assistance, tant que les conditions suivantes sont remplies :

 

IBitsTokenOptions