Как вызвать REST API из DevOps Azure с помощью токена носителя - PullRequest
1 голос
/ 28 октября 2019

Я пытаюсь использовать задачу Azure DevOps для программного назначения ресурса прогнозирования LUIS приложению LUIS, как описано здесь . Короче говоря, это включает

Я могу выполнить эти шаги вручную, но как это сделать из DevOps Azure? Я пытался использовать задачу «Invoke REST API» из задания без агента, но не понимаю, как я могу получить и использовать токен Bearer. Обратите внимание, что срок действия токена на предъявителя истекает.

Спасибо за ваш совет.

1 Ответ

2 голосов
/ 29 октября 2019

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

Получить токен Azure Resource Manager : Вы можете обратиться к приведенному ниже PowerShell. скрипты для получения токена. Проверьте здесь для получения дополнительной информации о том, где можно получить идентификатор клиента и его секрет. Обратите внимание, что ресурс здесь "https://management.core.windows.net/"

$client_id = "{client id}"
$client_secret = "{client secret}"
$uri= "https://login.microsoftonline.com/{tenant id}/oauth2/token"

$Body = @{
        'resource'= "https://management.core.windows.net/"
        'client_id' = $client_id
        'grant_type' = 'client_credentials'
        'client_secret' = $client_secret
}

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

$response = Invoke-RestMethod @params
$token = $response.access_token

После того, как вы получили токен, вы можете передать его в API отдыха LUIS. Ниже приведен только сценарий.

$LuisBody = @{
        "azureSubscriptionId"= "{subscription_id}"
        "resourceGroup"= "{resource_group_name}"
        "accountName"= "{account_name}"
}

$Luisparams = @{
    Headers = @{ 
        Authorization = ("Bearer {0}" -f $token) # pass the token which got from above script
        "Ocp-Apim-Subscription-Key" = "{subscription key}"
        ContentType = "application/json"
        }

    Body = $LuisBody
    Method = 'Post'
    URI = "https://{endpoint}/luis/api/v2.0/apps/{appId}/azureaccounts"
}

 Invoke-RestMethod @Luisparams

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

Обновление: токен менеджера ресурсов GetAzure с интерфейсом командной строки Azure с приведенным ниже сценарием:

az account get-access-token --resource=https://management.core.windows.net/ | jq -r .accessToken

Проверьте официальные документы здесь и здесь для примера.

...