Использование конвейера Azure Yaml для вызова метода RestMethod powershell с секретной переменной в теле

#azure #powershell #auth0 #azure-pipelines-yaml

Вопрос:

Я пытаюсь автоматизировать шаг в нашем конвейере Azure yaml для удаления некоторых пользователей из Auth0 с помощью PowerShell и RestMethod, но по какой-то причине секрет либо используется неправильно, либо изменен, либо что-то в этом роде.

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

Вот моя последняя итерация, но все еще без радости, может ли кто-нибудь пролить свет на этот вопрос?

 
$api = "api/v2/"
$audience = $audience   $api
$secret = "$env:AUTH0_CLIENT_SECRET"
$test = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes($secret))

Write-Host $clientSecret.substring(0,10)
Write-Host $test.substring(0,10)
Write-Host $audience
Write-Host $clientId

$Body = @{
    client_id = $clientId
    client_secret = $test OR $secret OR $clientSecret
    audience = $audience
    grant_type = "client_credentials"
}

Write-Host 'Getting token'
$response = Invoke-RestMethod https://mytenant.eu.auth0.com/oauth/token `
-Method 'POST' `
-ContentType 'application/json; charset=utf-8' `
-Body ($Body | ConvertTo-Json)
 

Как показано, я пытался использовать test, secret и clientSecret в качестве секрета, но также безуспешно. Узел записи в начале показывает правильные начальные символы для $clientSecret

Я упускаю что-то основное или это просто невозможно с помощью метода RestMethod?

Комментарии:

1. На мой взгляд, это скорее проблема OAuth2.0. Вы уверены, что его там https://mytenant.eu.auth0.com/oauth2/token нет? Или, может быть, вам нужно установить scope ?

2. Когда я запускаю этот код локально и передаю секрет в качестве параметра, он работает идеально, просто в конвейере yaml он неправильно обрабатывает секрет

Ответ №1:

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

 
$token = "/oauth/token"
$https = "https://"
$api = "/api/v2/"

$audience = $https   $domain   $api
$tokenUrl = $https   $domain   $token

Write-Host 'Getting token'
$response = Invoke-RestMethod $tokenUrl `
    -Method 'POST' `
    -ContentType 'application/json; charset=utf-8' `
    -Body (@{ 
        client_id     = $clientId 
        client_secret = "$env:AUTH0_CLIENT_SECRET" 
        audience      = $audience
        grant_type    = "client_credentials" 
    } | ConvertTo-Json)