Ошибка аутентификации при подключении к TFS через Powershell
Я почти ничего не знаю о вызовах 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 ответ
Решение
Это то, что исправило мою проблему. Вы должны закодировать токен, используемый для подключения к 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, потому что он выдавал ошибку относительно десериализации.