Tokens auxiliares para trabajos de transferencia de BITS

En Windows Vista, el servicio De transferencia inteligente en segundo plano (BITS) permite a una aplicación asociar un único token de seguridad a un trabajo de transferencia de BITS. Después, el trabajo de transferencia de BITS usa este token para la autenticación y para el acceso a recursos locales y remotos.

En Windows 7, el servicio BITS asocia un token adicional a un trabajo de transferencia de BITS. El trabajo de transferencia de BITS se puede configurar con un token de seguridad adicional, que es un token de suplantación creado por una aplicación que llama a la API COM de BITS. Este modelo de token auxiliar permite a las aplicaciones usar simultáneamente dos tokens de seguridad diferentes para acceder a archivos locales, certificados del lado cliente, archivos remotos y servidores proxy. Por ejemplo, se crea un trabajo de transferencia de BITS que escribe los datos descargados en un directorio local con privilegios y, a continuación, presenta una identidad de dominio de derechos bajos en el servidor HTTP y en el servidor proxy.

Una aplicación, normalmente un servicio de Windows, especifica un token auxiliar mediante la nueva interfaz IBitsTokenOptions. Este objeto de trabajo de BITS implementa esta interfaz. La aplicación llama a IBackgroundCopyJob::QueryInterface para obtener el puntero de interfaz. La aplicación suplanta la identidad del asistente y llama a IBitsTokenOptions::SetHelperToken para pasar el token al servicio BITS. A continuación, la aplicación especifica los recursos a los que se aplica el token pasando un conjunto de marcas de bits mediante IBitsTokenOptions::SetHelperTokenFlags. La aplicación borra todas las marcas (con SetHelperTokenFlags de nuevo) para revertir el comportamiento. El servicio BITS almacena las marcas de bits y el token en el trabajo de transferencia de BITS.

Cuando el propietario de los trabajos de transferencia de BITS cierra sesión, el servicio BITS descarta los tokens auxiliares asociados al trabajo de transferencia. Si la transferencia no está completa, el servicio BITS coloca el trabajo en un estado de error con el código de error BG_E_TOKEN_REQUIRED y descarta el token auxiliar. La aplicación cliente puede actualizar el token llamando a IBitsTokenOptions::SetHelperToken y, a continuación, puede reanudar el trabajo de transferencia de BITS. Como alternativa, la aplicación cliente puede borrar las marcas de token auxiliar mediante IBitsTokenOptions::SetHelperTokenFlags y, a continuación, reanudar el trabajo de transferencia sin un token auxiliar.

De forma similar, cuando el propietario de una sesión de terminal Services cierra sesión, el servicio BITS debe descartar los tokens auxiliares de esa sesión y colocar los trabajos de transferencia afectados en un estado de error con el código de error BG_E_TOKEN_REQUIRED .

El modelo de token auxiliar requiere un cambio en la directiva de control de acceso de BITS. Las versiones anteriores de BITS implementaron comprobaciones de acceso en cada llamada de método. A partir de Windows 7, la comprobación de acceso debe realizarse dentro de la llamada IBackgroundCopyJob::QueryInterface ; De lo contrario, es posible que el token auxiliar no tenga acceso al trabajo de transferencia.

Nota

Las implementaciones anteriores requieren eficazmente que los usuarios de BITS tengan privilegios de administrador para establecer tokens auxiliares. A partir de Windows 10, versión 1607, los usuarios de BITS que no son administradores pueden usar IBitsTokenOptions::SetHelperToken para establecer tokens auxiliares que no son de administrador en los trabajos de BITS que poseen. Este cambio permite a los usuarios de BITS que no son administradores (como los servicios de descargador en segundo plano que se ejecutan en la cuenta networkService) establecer tokens auxiliares.

En concreto, se ha cambiado la implementación para permitir que los usuarios sin privilegios de administrador establezcan tokens auxiliares, siempre y cuando se cumplan las condiciones siguientes:

 

IBitsTokenOptions