Структурирование заголовков API Azure для использования в запросе PowerShell - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь написать некоторый код PowerShell для взаимодействия с API хранилища в Azure Commercial, и у меня возникают некоторые проблемы с получением правильной структуры заголовков.

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

# Get token for Azure Resource Manager API
$Body = @{
    'resource'      = $storageResourceID
    'client_id'     = $tf_sp_appid
    'grant_type'    = 'client_credentials'
    'client_secret' = $terraform_sp_secret
}

$params = @{
    ContentType = 'application/x-www-form-urlencoded'
    Headers     = @{'accept' = 'application/json'}
    Body        = $Body
    Method      = 'Post'
    URI         = $TokenEndpoint
}

# Get token
$token = Invoke-RestMethod @params

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

$getDate = ((get-date).ToUniversalTime()).ToString('R')
$RestAPIParams = @{
    Uri    = "https://$storageAcctName.blob.core.windows.net/?comp=list"
    Method = "Get"
    Verbose = $true
    Headers = @{
        'authorization' = "Bearer $($token.access_token)"
        'x-ms-date' = "$getDate"
        'x-ms-version' = "2017-10-01"
        }
    }
$result = (Invoke-RestMethod @RestAPIParams).value

enter image description here

1 Ответ

0 голосов
/ 16 января 2019

Если вы хотите перечислить контейнеры в учетной записи хранения с токеном доступа, вы можете обратиться к приведенной ниже команде, я использую приложение AD v1, оно отлично работает на моей стороне.

# Get token for Azure Resource Manager API
$Body = @{
    'resource'      = 'https://management.azure.com/'
    'client_id'     = '<your client id>'
    'grant_type'    = 'client_credentials'
    'client_secret' = "<your client secret>"
}

$params = @{
    ContentType = 'application/x-www-form-urlencoded'
    Headers     = @{'accept' = 'application/json'}
    Body        = $Body
    Method      = 'Post'
    URI         = 'https://login.microsoftonline.com/<your tenant id>/oauth2/token?api-version=1.0'
}

# Get token
$token = Invoke-RestMethod @params

$RestAPIParams = @{
    Uri    = "https://management.azure.com/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.Storage/storageAccounts/<storage account name>/blobServices/default/containers?api-version=2018-03-01-preview"
    Method = "Get"
    Verbose = $true
    Headers = @{
        'authorization' = "Bearer $($token.access_token)"
        }
    }
$result = (Invoke-RestMethod @RestAPIParams).value

Результат теста :

enter image description here

...