无法在 Bash 脚本中的 cURL 命令中使用 PAT 访问 Azure DevOps API

hcd*_*ocs 9 api bash curl azure azure-devops

我有一个脚本,它使用 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"
Run Code Online (Sandbox Code Playgroud)

以下是事实:

  • 直接在浏览器中访问该URL即可成功。
  • 新令牌与 URL 位于同一项目中。
  • 新令牌具有完全访问权限。

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

curl -u username[:{personalaccesstoken}] https://dev.azure.com/{organization}/_apis/build-release/builds
Run Code Online (Sandbox Code Playgroud)

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

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

  • {用户名}:{PAT}
  • {用户名}@{公司}.com:{PAT}
  • Base-64 编码 {PAT}
  • Base-64 编码的{用户名}@{公司}.com:{PAT}
  • Base-64 编码 pat:{PAT}
  • Base-64 编码的{用户名}:{PAT}
  • Base-64 编码的{用户名}@{公司}.com:{PAT}

我已经在命令行和邮递员中尝试过,但没有提供任何添加信息。

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

小智 19

尝试以下命令:

curl -u :{PAT} 'https://dev.azure.com/{company}/{project}/_apis/wit/wiql/{query ID}?api-version=5.1'
Run Code Online (Sandbox Code Playgroud)

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

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

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