Ошибка аутентификации при подключении к TFS через Powershell - PullRequest
0 голосов
/ 23 мая 2018

Я почти ничего не знаю о вызовах Rest API, так что терпите меня.Я пытаюсь поставить в очередь сборку TFS 2017, используя Rest API через Powershell.Я пытался использовать TFS API, но обнаружил, что не сможет работать на меня.Вот что у меня есть:

$Uri = "http://MyTFS:8080/tfs/DefaultCollection/Project/_apis/build/builds?api-version=3.0"
$TFSAPIKeyForAutomatedBuild = SecretKey
$body = @"
   {
    "definition": 
        {
         "ID": "BuildID"
        },
    "RequestedFor":
        {
        "Id":"MyID"
        }
    }
"@
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Authorization", "Bearer $TFSAPIKeyForAutomatedBuild")
$buildresponse = Invoke-RestMethod -Method Post -header $headers -ContentType application/json -Uri $Uri -Body (ConvertTo-Json $Body)

Однако, когда я запускаю это, я получаю ошибку:

TF400813: Ресурс недоступен для анонимного доступа.Требуется проверка подлинности клиента

Кроме того, я уже смог поставить в очередь сборку с использованием Postman, поэтому она должна работать так или иначе.

Будем благодарны за любые предложения.

1 Ответ

0 голосов
/ 24 мая 2018

Это то, что исправило мою проблему.Вы должны закодировать токен, используемый для подключения к TFS, следующим образом:

$encodedPAT = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes(":$TFSAPIKeyForAutomatedBuild"))
$Uri = "http://MyTfs:8080/tfs/DefaultCollection/Projects/_apis/build/builds?api-version=3.0"

$body = @{ definition = @{id = BuildID} }
$bodyJson = ConvertTo-Json $body

write-host $bodyJson
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Authorization", "Basic $encodedPAT")

$buildresponse = Invoke-RestMethod -Method Post -header $headers -ContentType application/json -Uri $Uri -Body (ConvertTo-Json $body)

Я также изменил формат моего json, потому что он выдавал ошибку относительно десериализации.

...