bash - 无法在 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"
以下是事实:
- 在浏览器中直接访问 URL 成功。
- 新令牌与 URL 位于同一项目中。
- 新令牌具有完全访问权限。
有关 ADO PAT 的 Microsoft 文档提供了此示例:
curl -u username[:{personalaccesstoken}] https://dev.azure.com/{organization}/_apis/build-release/builds
但是,当使用我知道正确的 URL 输入我的用户名和 PAT 时,它是未经授权的。
无论是 Microsoft 示例的格式还是我想在我的脚本中使用的 URL,这些在 和 的所有迭代中都是未经授权Bearer
的Basic
。使用的 URL 在浏览器中有效:
- {用户名}:{PAT}
- {用户名}@{公司}.com:{PAT}
- Base-64 编码 {PAT}
- Base-64 编码 {username}@{company}.com:{PAT}
- Base-64 编码的 pat:{PAT}
- Base-64 编码的 {username}:{PAT}
- Base-64 编码 {username}@{company}.com:{PAT}
我在命令行和 Postman 中都尝试过,但没有提供任何附加信息。
我错过了一些明显的东西吗?最令人困惑的方面是以前的 PAT 在相同的代码中工作。感谢您的任何帮助。
解决方案
试试下面的命令:
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'