BITS 传输作业的帮助程序令牌
在 Windows Vista 中,后台智能传输服务(BITS)服务允许应用程序将单个安全令牌关联到 BITS 传输作业。 然后,BITS 传输作业使用此令牌进行身份验证,并访问本地和远程资源。
在 Windows 7 中,BITS 服务将附加令牌关联到 BITS 传输作业。 BITS 传输作业可以使用额外的安全令牌进行配置,这是由调用 BITS COM API 的应用程序创建的模拟令牌。 此帮助程序令牌模型允许应用程序同时使用两个不同的安全令牌来访问本地文件、客户端证书、远程文件和代理。 例如,创建 BITS 传输作业,将下载的数据写入特权本地目录,然后将低权限域标识呈现给 HTTP 服务器和代理服务器。
应用程序(通常是 Windows 服务)通过使用新接口 IBitsTokenOptions指定帮助程序令牌。 此接口由 BITS 作业对象实现。 应用程序调用 IBackgroundCopyJob::QueryInterface 来获取接口指针。 应用程序模拟帮助程序标识,并调用 IBitsTokenOptions::SetHelperToken 将令牌传递给 BITS 服务。 然后,应用程序通过使用 IBitsTokenOptions::SetHelperTokenFlags传递一组位标志来指定令牌应用到的资源。 应用程序将清除所有标志(再次使用 SetHelperTokenFlags)还原行为。 BITS 服务将位标志和令牌存储在 BITS 传输作业中。
当 BITS 传输作业的所有者注销时,BITS 服务将放弃与传输作业关联的任何帮助程序令牌。 如果传输未完成,BITS 服务会将作业置于错误状态,并 BG_E_TOKEN_REQUIRED 错误代码并丢弃帮助程序令牌。 客户端应用程序可以通过调用 IBitsTokenOptions::SetHelperToken 来刷新令牌,然后可以恢复 BITS 传输作业。 或者,客户端应用程序可以使用 IBitsTokenOptions::SetHelperTokenFlags 清除帮助程序令牌标志,然后在没有帮助程序令牌的情况下恢复传输作业。
同样,当终端服务会话的所有者注销时,BITS 服务必须放弃该会话中的任何帮助程序令牌,并将受影响的传输作业置于错误状态,并 BG_E_TOKEN_REQUIRED 错误代码。
帮助程序令牌模型需要更改 BITS 访问控制策略。 以前版本的 BITS 实现了对每个方法调用的访问检查。 从 Windows 7 开始,必须在 IBackgroundCopyJob::QueryInterface 调用中执行访问检查;否则,帮助程序令牌可能无权访问传输作业。
注意
旧实现实际上要求 BITS 用户具有管理员权限才能设置帮助程序令牌。 从 Windows 10 版本 1607 开始,非管理员 BITS 用户可以使用 IBitsTokenOptions::SetHelperToken 在自己拥有的 BITS 作业上设置非管理员帮助程序令牌。 此更改使非管理员 BITS 用户(如在 NetworkService 帐户下运行的后台下载程序服务)可以设置帮助程序令牌。
具体来说,只要满足以下条件,实现就已更改,以允许没有管理员权限的用户设置帮助程序令牌:
- 在 IBackgroundCopyJob::QueryInterface 调用期间,调用方线程令牌的 SID 与作业所有者用户帐户的 SID 相同,并且
- 调用 IBitsTokenOptions::SetHelperToken 时,帮助程序令牌未启用管理员 SID(DOMAIN_ALIAS_RID_ADMINS)。
相关主题