Powershell Invoke-RestMethod не аутентифицирован с помощью PAT для Azure DevOps

Я пытаюсь вызвать REST API нашего проекта Azure DevOps и получаю неожиданные результаты.

Я могу получить результаты с помощью LinqPad, но с помощью Powershell не удается.

Мой сценарий

$env:Build_BuildId = 2468
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes("myPAT"))
$env:System_TeamProject = "myProject"

$url = "https://dev.azure.com/myorg/$env:System_TeamProject/_apis/build/builds/$env:Build_BuildId/changes?api-version=5.0"

$response = Invoke-RestMethod -Uri $url -Method Get -ContentType "application/json" -Headers @{ 
    Authorization = "Basic $token" 
}

Write-Host $response

Ответ

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">




<html lang="en-US">
<head><title>

            Azure DevOps Services | Sign In

</title><meta http-equiv="X-UA-Compatible" content="IE=11;&#32;IE=10;&#32;IE=9;&#32;IE=8" />
    <link rel="SHORTCUT ICON" href="/favicon.ico"/>

    <link data-bundlelength="508485" data-bundlename="commoncss" data-highcontrast="/_static/tfs/M154_20190628.18/_cssbundles/HighContrast/vss-bundle-commoncss-vAEI_yKFIiS9jTVmCtAOiwe4cLPqdXnp6QCUVseU7jzk=" data-includedstyles="jQueryUI-Modified;Core;Splitter;PivotView" href="/_static/tfs/M154_20190628.18/_cssbundles/Default/vss-bundle-commoncss-vqjKBNZxfVQkGGn0rrvF7eh9DJDj__wqtFN85fVrIQn8=" rel="stylesheet" />
<link data-bundlelength="116162" data-bundlename="viewcss" data-highcontrast="/_static/tfs/M154_20190628.18/_cssbundles/HighContrast/vss-bundle-viewcss-v356iHjTFccxhkNidRJIEefQ92VqpWpa7rO4mdtAnDpM=" data-includedstyles="VSS.Controls" href="/_static/tfs/M154_20190628.18/_cssbundles/Default/vss-bundle-viewcss-vXHgBtK2hntEJYzWnMNhcJkJC-nUhp2m3BtF-jVlzOZA=" rel="stylesheet" />
... etc. etc.

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

введите описание изображения здесь

Я дважды и трижды проверил свой PAT и даже создал несколько новых версий с полным доступом без изменений в поведении.


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


person Josh Gust    schedule 10.07.2019    source источник
comment
Похоже, вы неправильно кодируете PAT. Согласно документации , должно получиться примерно так: [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$PersonalAccessToken))). Параметр $user обычно пуст,   -  person boxdog    schedule 11.07.2019


Ответы (1)


$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes("myPAT")) неверно. myPAT должно начинаться с двоеточия.

Ex:

$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":myPAT"))
person Daniel Mann    schedule 11.07.2019