Bitbucket API - 使用 access_token

Zag*_*Gol 1 bitbucket bitbucket-api

我正在尝试获取我们公司 bitbucket 云的回购详细信息。使用 API:

curl --request GET \
   --url 'https://api.bitbucket.org/2.0/repositories/{workspace}/{repo_slug}' \
   --header 'Authorization: Bearer <access_token>' \
   --header 'Accept: application/json'
Run Code Online (Sandbox Code Playgroud)

来自 https://developer.atlassian.com/cloud/bitbucket/rest/api-group-repositories/#api-repositories-workspace-repo-slug-get

问题是我使用的每个密钥/令牌都会收到以下错误响应

{"type": "error", "error": {"message": "Access token expired."}}
Run Code Online (Sandbox Code Playgroud)

我创建了 OAuth 2.0 密钥和秘密,并尝试了它们。

--header 'Authorization: Bearer <KEY>'
--header 'Authorization: Bearer <SECRET>'
Run Code Online (Sandbox Code Playgroud)

我也尝试过应用程序密码:

--header 'Authorization: Bearer <APP PASSWORD>'
Run Code Online (Sandbox Code Playgroud)

还可以使用 SSH 密钥:

--header 'Authorization: Bearer <SSH KEY>'
Run Code Online (Sandbox Code Playgroud)

但我得到了同样的错误。

谢谢

Ray*_*pew 6

我建议您完全省略“Authorization:Bearer”标头,并使用app_password代替。事实上,Atlassian 建议使用应用程序密码,这样您就可以完全绕过access_token.

请参阅身份验证方法文档页面的应用程序密码部分。

这是它的工作原理。(请注意,这些示例中缺少“Authorization: Bearer”标头。)如果您的工作区是companyname,您的用户名是prospero,并且您根据 Atlassian 文档创建的应用程序密码是a1b2c3d4e5f6g7h8,那么您可以在以下位置检索存储库列表:这种方式。

卷曲:

curl -u prospero:a1b2c3d4e5f6g7h8 https://api.bitbucket.org/2.0/repositories/companyname
Run Code Online (Sandbox Code Playgroud)

Python:

import requests
import json

r = requests.get('https://api.bitbucket.org/2.0/repositories/companyname', auth=('prospero', 'a1b2c3d4e5f6g7h8'))
print(r.text)
print(json.dumps(r.json(), indent=4))
Run Code Online (Sandbox Code Playgroud)

当然,您会想要使用更复杂的代码。这些只是简单的例子。