Почему мой PowerShell Base64 String урезан до 36 символов? - PullRequest
0 голосов
/ 15 мая 2018

Я использую 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, код сможет его прочитать, хотя вывод в журнал маскируется.

Ответы [ 2 ]

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

Использование $ Env: variable не позволяет использовать значение, когда переменная является секретной.Однако, передав его в качестве параметра в PowerShell, код сможет его прочитать, хотя вывод в журнал маскируется.

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

Этот раздел определенно ошибочен. Я вижу одно, что определенно не так, другое, возможно, неправильное.

$VstsAccessEmail = $Env:VstsAccessEmail 
$VstsAccessToken = $Env:VstsAccessToken
$pair = "${VstsAccessEmail}:${VstsAccessToken}"
$base64 = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($pair))
  1. $pair = "${VstsAccessEmail}:${VstsAccessToken}" должно быть $pair = ":${VstsAccessToken}". Адрес электронной почты не требуется, просто двоеточие, а затем токен авторизации.

  2. UTF8.GetBytes может ошибаться. Я всегда использую ASCII.GetBytes.

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