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

rbl8hiat  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(139)

我有一个脚本,它使用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

但是,当我的用户名和PAT与一个我知道是正确的URL输入时,它是未经授权的。
无论是Microsoft示例的格式,还是我希望在脚本中使用的URL,在BearerBasic的所有迭代中都是未经授权的。使用的URL在浏览器中有效:

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

我已经尝试了命令行和 Postman ,但没有提供额外的信息。
我是否遗漏了一些明显的东西?最令人困惑的是,以前的PAT在同一代码中工作。感谢您的帮助。

c86crjj0

c86crjj01#

请尝试以下命令:

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'
ljo96ir5

ljo96ir52#

Postman
1.使用不带用户名的授权:选择Basic Auth.(基本身份验证)并输入PAT作为密码。
1.使用标头:将密钥用作授权,将值用作基本{Base-64编码的pat{:PAT}}。请注意,{:PAT}需要进行base64编码
curl
1.使用基本身份验证而不使用用户名: curl -u:{PAT} https://dev.azure.com/{org}/_apis/projects
1.使用标头:curl -H '授权:基本{Base-64编码路径{:PAT}}'https://dev.azure.com/{org}/_apis/projects

相关问题