API TFS 2015 - 401 - неавторизовано: доступ запрещен из-за неверных учетных данных - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь вызвать REST API для получения сведений о предыдущих сборках, но когда я пытаюсь запустить скрипт, который вызывает API, я получаю сообщение об ошибке в заголовке:

401 - Несанкционировано: доступ запрещен из-за неверных учетных данных

Он использует учетные данные Агента сборки на сервере сборки. Сервер сборки может видеть URL TFS, потому что он может успешно собрать. И если я пытаюсь вызвать API, используя мои учетные данные, это работает. Он просто не будет работать с учетной записью, под которой работает агент сборки.

Есть идеи?

1 Ответ

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

Как вы установили Авторизацию в своем скрипте?

  1. Вы можете Использовать токен OAuth для доступа к REST API

Чтобы ваш скрипт мог использовать токен OAuth процесса сборки, перейдите в Параметры на вкладке определения сборки и выберите Разрешить доступ к сценариям Токен OAuth ( Ссылка ниже на скриншоте для включения опции ).

Ниже скрипт работает на моей стороне:

$url = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/build/builds/14?api-version=2.0"
Write-Host "URL: $url"
$result = Invoke-RestMethod -Uri $url -Headers @{
    Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}
Write-Host "$result = $($result | ConvertTo-Json -Depth 1000)"

  1. Вы также можете установить Авторизацию в скрипте, как показано ниже: (жестко закодировать ваши учетные данные в скрипте)

Например:

Param(
   [string]$collectionurl = "http://server:8080/tfs/DefaultCollection",
   [string]$projectName = "ProjectName",
   [string]$keepForever = "true",
   [string]$BuildId = "8",
   [string]$user = "UserName",
   [string]$token = "Password"
)

# Base64-encodes the Personal Access Token (PAT) appropriately
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))

$uri = "$($collectionurl)/$($projectName)/_apis/build/builds/$($BuildId)?api-version=2.0"
$result = Invoke-RestMethod -Uri $uri -Method Get -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}

Write-Host "$result = $($result | ConvertTo-Json -Depth 1000)"

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...