如何使用承载令牌从 Azure DevOps 调用 REST API

How do I Invoke a REST API from Azure DevOps using Bearer Token

我正在尝试使用 Azure DevOps 任务以编程方式将 LUIS 预测资源分配给 LUIS 应用程序,如记录的那样 here。简而言之,这涉及

我可以手动执行这些步骤,但如何从 Azure DevOps 执行此操作? 我曾尝试使用无代理作业中的 'Invoke REST API' 任务,但看不到如何检索和使用 Bearer 令牌。 请注意 Bearer 令牌已过期。

感谢您的建议。

您可以在您的管道中添加一个 powershell 任务,以便从 azure devops 执行此操作。

获取Azure资源管理器令牌:您可以参考以下powershell脚本获取令牌。检查 here for more information about where to get client id and client secret. Please be noted that the resource here is "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

获得令牌后,您可以将其传递给 LUIS rest api。以下脚本仅作为示例。

$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

还有一个 blog 您可能会觉得有用。

更新: 使用 Azure CLI 使用以下脚本获取 Azure 资源管理器令牌:

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

查看官方文档here, and here作为示例。