Tokens auxiliares para trabalhos de transferência do BITS

No Windows Vista, o serviço BITS (Serviço de Transferência Inteligente em Segundo Plano) permite que um aplicativo associe um único token de segurança a um trabalho de transferência do BITS. O trabalho de transferência do BITS usa esse token para autenticação e acesso a recursos locais e remotos.

No Windows 7, o serviço BITS associa um token adicional a um trabalho de transferência do BITS. O trabalho de transferência do BITS pode ser configurado com um token de segurança adicional, que é um token de representação criado por um aplicativo chamando a API COM BITS. Esse modelo de token auxiliar permite que os aplicativos usem simultaneamente dois tokens de segurança diferentes para acessar arquivos locais, certificados do lado do cliente, arquivos remotos e proxies. Por exemplo, é criado um trabalho de transferência do BITS que grava os dados baixados em um diretório local privilegiado e, em seguida, apresenta uma identidade de domínio de direitos baixos para o servidor HTTP e o servidor proxy.

Um aplicativo, normalmente um serviço do Windows, especifica um token auxiliar usando a nova interface IBitsTokenOptions. Essa interface é implementada pelo objeto de trabalho do BITS. O aplicativo chama IBackgroundCopyJob::QueryInterface para obter o ponteiro da interface. O aplicativo representa a identidade auxiliar e chama IBitsTokenOptions::SetHelperToken para passar o token para o serviço BITS. Em seguida, o aplicativo especifica os recursos aos quais o token se aplica passando um conjunto de sinalizadores de bits usando IBitsTokenOptions::SetHelperTokenFlags. O aplicativo limpa todos os sinalizadores (usando SetHelperTokenFlags novamente) para reverter o comportamento. O serviço BITS armazena os sinalizadores de bits e o token no trabalho de transferência do BITS.

Quando o proprietário dos trabalhos de transferência do BITS faz logoff, o serviço BITS descarta todos os tokens auxiliares associados ao trabalho de transferência. Se a transferência não for concluída, o serviço BITS colocará o trabalho em um estado de erro com o código de erro BG_E_TOKEN_REQUIRED e descartará o token auxiliar. O aplicativo cliente pode atualizar o token chamando IBitsTokenOptions::SetHelperToken e, em seguida, pode retomar o trabalho de transferência do BITS. Como alternativa, o aplicativo cliente pode limpar os sinalizadores de token auxiliar usando IBitsTokenOptions::SetHelperTokenFlags e, em seguida, retomar o trabalho de transferência sem um token auxiliar.

Da mesma forma, quando o proprietário de uma sessão de serviços de terminal faz logoff, o serviço BITS deve descartar quaisquer tokens auxiliares dessa sessão e colocar os trabalhos de transferência afetados em um estado de erro com o código de erro BG_E_TOKEN_REQUIRED .

O modelo de token auxiliar requer uma alteração na política de controle de acesso do BITS. Versões anteriores do BITS implementavam verificações de acesso em cada chamada de método. A partir do Windows 7, a verificação de acesso deve ser executada dentro da chamada IBackgroundCopyJob::QueryInterface , caso contrário, o token auxiliar pode não ter acesso ao trabalho de transferência.

Observação

As implementações mais antigas exigiam efetivamente que os usuários do BITS tivessem privilégios de administrador para definir tokens auxiliares. A partir do Windows 10, versão 1607, os usuários do BITS não administradores podem usar IBitsTokenOptions::SetHelperToken para definir tokens auxiliares de não administrador em trabalhos do BITS que possuem. Essa alteração permite que usuários BITS não administradores (como serviços de download em segundo plano executados na conta NetworkService) definam tokens auxiliares.

Especificamente, a implementação foi alterada para permitir que usuários sem privilégios de administrador definam tokens auxiliares, desde que as seguintes condições sejam atendidas:

 

IBitsTokenOptions