首页 > 解决方案 > 无法在 Bash 脚本的 cURL 命令中使用 PAT 访问 Azure DevOps API

问题描述

我有一个脚本,它使用 Azure DevOps API 来检索查询中的每个工作项。然后它检索每个工作项的元数据。它需要 PAT。直到今天,PAT 一直有效。我相信它已经过期了。我创建了一个新的 PAT,但每次检索相同信息的尝试都是未经授权的 (401)。

我的脚本中的 cURL 命令一直有效:

ado_token={username@company.com:PAT, all Base-64 encoded as one string}

curl -X GET -H "Authorization: Basic $ado_token" -H 'Cache-Control: no-cache' "https://dev.azure.com/{company}/{project}/_apis/wit/wiql/{query ID}?api-version=5.1"

以下是事实:

有关 ADO PAT 的 Microsoft 文档提供了此示例:

curl -u username[:{personalaccesstoken}] https://dev.azure.com/{organization}/_apis/build-release/builds

但是,当使用我知道正确的 URL 输入我的用户名和 PAT 时,它是未经授权的。

无论是 Microsoft 示例的格式还是我想在我的脚本中使用的 URL,这些在 和 的所有迭代中都是未经授权BearerBasic。使用的 URL 在浏览器中有效:

我在命令行和 Postman 中都尝试过,但没有提供任何附加信息。

我错过了一些明显的东西吗?最令人困惑的方面是以前的 PAT 在相同的代码中工作。感谢您的任何帮助。

标签: bashazureapicurlazure-devops

解决方案


试试下面的命令:

curl -u :{PAT} 'https://dev.azure.com/{company}/{project}/_apis/wit/wiql/{query ID}?api-version=5.1'

在 -u 参数中,用户名字段必须为空白,并且 PAT 是原始字符串。

因此,该命令将采用以下格式:

curl -u :lplnqn4l4glwqkslsfel7t2wjevfi5tayuiwm772qeawbwo3ztua 'https://dev.azure.com/acme/projetx/_apis/wit/wiql/6cbbddb4-f752-453b-9f98-f523470826fe?api-version=5.1'

推荐阅读