Разрешения, необходимые для этих TFS (в помещении) REST URL? - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь автоматизировать некоторые задания, для которых требуется информация о пулах агентов и агентах, и хотя скрипт задания отлично работает для обычных пользователей моей коллекции TFS, он с треском проваливается для учетной записи службы.

Мой скрипт работы пытается получить доступ к URL

http://<instance>/<collection>/_apis/distributedtask/pools
http://<instance>/<collection>/_apis/distributedtask/pools/<pool>/agents

Изначально мой сервисный аккаунт получил ответ типа

TF400813: The user &#39;<service account>&#39; is not authorized to access this resource

Учетная запись службы ранее не входила ни в одну группу AD, связанную с TFS, но после создания новой группы и добавления ее в «Project Collection Valid Users» вызов не завершился ошибкой, но в ответ по-прежнему не включена информация о пуле.

Если я изменяю интерактивные учетные записи учетной записи службы, графический интерфейс для агентов в пуле агентов не показывает никакой информации, кроме подсказки

no agents are registered or you do not have permission to view the agents 

предполагает, что разрешение отсутствует.

Я пытался добавить служебную учетную запись в различные группы в TFS, такие как администраторы коллекций проектов, администраторы сборок проектов и т. Д., Но все безрезультатно.

Короче говоря, какие разрешения нужны учетной записи службы для получения информации из URL, упомянутых в начале?

1 Ответ

0 голосов
/ 02 июля 2018

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

Итак, в качестве временного решения вы можете вызвать REST API, используя обычных пользователей или PAT в вашем скрипте.

Ниже у меня работает скрипт PowerShell:

$user = "Domain\username"
$token = "password"

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

$uri = "http://SERVER:8080/tfs/_apis/distributedtask/pools/1/agents/5"
$result = Invoke-RestMethod -Uri $uri -Method Get -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}

Write-Host "result = $($result | ConvertTo-Json -Depth 100)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...