Я использую PowerShell внутри VSTS Build для запросов к VSTS API.Я использую PAT для аутентификации.
Однако, я вижу, что он не работает, когда я генерирую строку Auth.Вот мой код внутри
$VstsAccessEmail = $Env:VstsAccessEmail
$VstsAccessToken = $Env:VstsAccessToken
$pair = "${VstsAccessEmail}:${VstsAccessToken}"
$base64 = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($pair))
Write-Host $base64
Если я увижу здесь результат, я вижу первые 36 символов фактической строки аутентификации.Я сгенерировал строку, используя Powershell на своем компьютере, и получил все 108 символов.Я жестко запрограммировал это на время, чтобы проверить это, как следующие шаги, которые следуют приведенному выше коду:
$base641 = "a2FuZ2thbi5nb3N3YW1pQHVuaXN5cy5jb206cHh4b25oaHBlNmtjb3g3aTRhdHZxMzdoNms2ZnpuNHhyaWhyZ2ozdGZ3ejRlNmxxxxXXXX=="
if($base64.length -ne 108){
$base64 = $base641
}
Write-Host "base64 is: $base64 "
Это работает правильно.Первоначально я думал, что это может быть проблема с записью на хост.Однако, если я вызываю RestMethod без обновления с помощью жестко запрограммированного, я получаю 401 Несанкционированный.
Пожалуйста, помогите.
ОБНОВЛЕНИЕ:
Я нашел проблему.Я установил VstsAccessToken
как секрет в переменных сборки.Таким образом, ценность не приходит.делает его незащищенным работает нормально.
Может кто-нибудь помочь, как это можно сделать, храня токен в секрете?
решено
Использование $ Env: variable не позволяет использовать значение, когда переменная является секретной.Однако, передав его в качестве параметра в PowerShell, код сможет его прочитать, хотя вывод в журнал маскируется.