Hjälptoken för BITS-överföringsjobb
I Windows Vista tillåter BITS-tjänsten (Background Intelligent Transfer Service) ett program att associera en enda säkerhetstoken till ett BITS-överföringsjobb. BITS-överföringsjobbet använder sedan den här token för autentisering och för åtkomst till lokala resurser och fjärrresurser.
I Windows 7 associerar BITS-tjänsten ytterligare en token till ett BITS-överföringsjobb. BITS-överföringsjobbet kan konfigureras med ytterligare en säkerhetstoken, vilket är en personifieringstoken som skapats av ett program som anropar BITS COM API. Den här modellen med hjälptoken gör att program samtidigt kan använda två olika säkerhetstoken för att få åtkomst till lokala filer, certifikat på klientsidan, fjärrfiler och proxyservrar. Till exempel skapas ett BITS-överföringsjobb som skriver nedladdade data till en privilegierad lokal katalog och sedan visar en domänidentitet med låg behörighet till HTTP-servern och proxyservern.
Ett program, vanligtvis en Windows-tjänst, anger en hjälptoken med hjälp av det nya gränssnittet IBitsTokenOptions. Det här gränssnittet implementeras av BITS-jobbobjektet. Programmet anropar IBackgroundCopyJob::QueryInterface för att hämta gränssnittspekaren. Programmet personifierar hjälpidentiteten och anropar IBitsTokenOptions::SetHelperToken för att skicka token till BITS-tjänsten. Sedan anger programmet de resurser som token gäller för genom att skicka en uppsättning bitflaggor med hjälp av IBitsTokenOptions::SetHelperTokenFlags. Programmet rensar alla flaggor (med SetHelperTokenFlags igen) för att återställa beteendet. BITS-tjänsten lagrar bitflaggor och token i BITS-överföringsjobbet.
När ägaren till BITS-överföringsjobben loggar ut tar BITS-tjänsten bort alla hjälptoken som är associerade med överföringsjobbet. Om överföringen inte är klar placerar BITS-tjänsten jobbet i ett feltillstånd med BG_E_TOKEN_REQUIRED felkod och tar bort hjälptoken. Klientprogrammet kan uppdatera token genom att anropa IBitsTokenOptions::SetHelperToken och kan sedan återuppta BITS-överföringsjobbet. Alternativt kan klientprogrammet rensa hjälptokenflaggor med hjälp av IBitsTokenOptions::SetHelperTokenFlags och sedan återuppta överföringsjobbet utan en hjälptoken.
När ägaren till en terminaltjänstsession loggar ut måste BITS-tjänsten på samma sätt ta bort eventuella hjälptoken från den sessionen och placera de berörda överföringsjobben i ett feltillstånd med felkoden BG_E_TOKEN_REQUIRED.
Hjälptokenmodellen kräver en ändring av BITS-åtkomstkontrollprincipen. Tidigare versioner av BITS implementerade åtkomstkontroller för varje metodanrop. Från och med Windows 7 måste åtkomstkontrollen utföras i IBackgroundCopyJob::QueryInterface-anrop; Annars kanske inte hjälptoken har åtkomst till överföringsjobbet.
Not
Äldre implementeringar krävde effektivt att BITS-användare har administratörsbehörighet för att kunna ange hjälptoken. Från och med Windows 10 version 1607 kan bits-användare som inte är administratör använda IBitsTokenOptions::SetHelperToken för att ange hjälptoken som inte är administratör för BITS-jobb som de äger. Den här ändringen gör det möjligt för BITS-användare som inte är administratörer (till exempel tjänster för bakgrundsnedladdning som körs under NetworkService-kontot) att ange hjälptoken.
Mer specifikt har implementeringen ändrats så att användare utan administratörsbehörighet kan ange hjälptoken så länge följande villkor uppfylls:
- under anropet IBackgroundCopyJob::QueryInterface är SID för anroparens trådtoken detsamma som SID för jobbägarens användarkonto och
- när IBitsTokenOptions::SetHelperToken anropas har hjälptoken inte administratörs-SID (DOMAIN_ALIAS_RID_ADMINS) aktiverat.
Relaterade ämnen