@@ -1367,16 +1367,28 @@ private static string GetDownloadInfoLookupKey(Pipelines.ActionStep action)
13671367 return $ "{ repositoryReference . Name } @{ repositoryReference . Ref } ";
13681368 }
13691369
1370- private AuthenticationHeaderValue CreateAuthHeader ( string token )
1370+ private AuthenticationHeaderValue CreateAuthHeader ( IExecutionContext executionContext , string downloadUrl , string token )
13711371 {
13721372 if ( string . IsNullOrEmpty ( token ) )
13731373 {
13741374 return null ;
13751375 }
13761376
1377- var base64EncodingToken = Convert . ToBase64String ( Encoding . UTF8 . GetBytes ( $ "x-access-token:{ token } ") ) ;
1378- HostContext . SecretMasker . AddValue ( base64EncodingToken ) ;
1379- return new AuthenticationHeaderValue ( "Basic" , base64EncodingToken ) ;
1377+ if ( executionContext . Global . Variables . GetBoolean ( Constants . Runner . Features . UseBearerTokenForCodeload ) == true &&
1378+ Uri . TryCreate ( downloadUrl , UriKind . Absolute , out var parsedUrl ) &&
1379+ ! string . IsNullOrEmpty ( parsedUrl ? . Host ) &&
1380+ parsedUrl . Host . StartsWith ( "codeload." , StringComparison . OrdinalIgnoreCase ) )
1381+ {
1382+ Trace . Info ( "Using Bearer token for action archive download directly to codeload." ) ;
1383+ return new AuthenticationHeaderValue ( "Bearer" , token ) ;
1384+ }
1385+ else
1386+ {
1387+ Trace . Info ( "Using Basic token for action archive download." ) ;
1388+ var base64EncodingToken = Convert . ToBase64String ( Encoding . UTF8 . GetBytes ( $ "x-access-token:{ token } ") ) ;
1389+ HostContext . SecretMasker . AddValue ( base64EncodingToken ) ;
1390+ return new AuthenticationHeaderValue ( "Basic" , base64EncodingToken ) ;
1391+ }
13801392 }
13811393
13821394 private async Task DownloadRepositoryArchive ( IExecutionContext executionContext , string downloadUrl , string downloadAuthToken , string archiveFile )
@@ -1401,7 +1413,7 @@ private async Task DownloadRepositoryArchive(IExecutionContext executionContext,
14011413 using ( var httpClientHandler = HostContext . CreateHttpClientHandler ( ) )
14021414 using ( var httpClient = new HttpClient ( httpClientHandler ) )
14031415 {
1404- httpClient . DefaultRequestHeaders . Authorization = CreateAuthHeader ( downloadAuthToken ) ;
1416+ httpClient . DefaultRequestHeaders . Authorization = CreateAuthHeader ( executionContext , downloadUrl , downloadAuthToken ) ;
14051417
14061418 httpClient . DefaultRequestHeaders . UserAgent . AddRange ( HostContext . UserAgents ) ;
14071419 using ( var response = await httpClient . GetAsync ( downloadUrl ) )
0 commit comments