【问题标题】:How to manipulate Bitbucket repository with token?如何使用令牌操作 Bitbucket 存储库?
【发布时间】:2014-07-25 22:15:57
【问题描述】:

我按照此文档从 bitbucket 获取令牌值和令牌秘密:
https://confluence.atlassian.com/display/BITBUCKET/OAuth+on+Bitbucket

之后,我想使用该令牌推送/拉取给定的仓库。

在 Github,我可以这样使用令牌: https://help.github.com/articles/git-automation-with-oauth-tokens#step-2-clone-a-repository

我的问题是如何在 bitbucket (mercurial/git) 上使用这种 http 授权?

【问题讨论】:

  • 自 2015 年 6 月起,这似乎得到了官方的支持。我在下面相应地编辑了我的答案。

标签: git oauth mercurial bitbucket


【解决方案1】:

我使用了在设置 -> 访问管理(侧边栏) -> 应用密码下从 Bitbucket Cpanel 创建的应用密码。完成此操作后,我使用我的用户名和新的应用程序密码克隆了存储库,如下所示:

https://[your_user_name]:[app_password]@bitbucket.org/[your_user_name]/[repo_name].git

【讨论】:

  • 第二个 [your_user_name] 可能是作为 repo 所有者的用户/组的名称。因此,如果您是 bubba,并且 repo 归虾仁公司所有,则 url 看起来像:https://bubba:[app_password]@bitbucket.org/shrimpingcorp/[repo_name].git
【解决方案2】:

这个BitBucket page mentions

我们最近推出了 OAuth 2,还添加了将它们用作 HTTP Basic Auth credentials 的功能。

使用访问令牌克隆存储库

由于插件无法上传自己的 SSH 密钥进行克隆,因此可以将访问令牌用作基本 HTTP 身份验证凭据,以通过 HTTPS 安全地进行克隆。

git clone https://x-token-auth:{access_token}@bitbucket.org/user/repo.git

需要使用文字字符串x-token-auth 代替用户名。

我们的流程与 GitHub 类似,但略有不同:不同之处在于 GitHub 将实际令牌放在用户名字段中。

在“OAuth on Bitbucket Cloud”查看更多信息,正如nick graziano 建议的in the comments

【讨论】:

  • 现在如果我们能获得 JWT 令牌!
【解决方案3】:

首先:只有 OAuth 2 令牌可用于克隆存储库

虽然从这个页面不清楚,但我看到人们尝试使用 OAuth 1 访问令牌。不幸的是,Git 和 Mercurial 不支持 OAuth 1,因此无法以这种方式克隆 repos。

这是因为 OAuth 1 要求对请求进行唯一签名。令牌本身只是 git 和 hg 不支持的加密签名过程的输入变量之一。

现在我们确实最近确实添加了对 OAuth 2 的支持,尽管它的名字叫它,但它是一个非常不同的协议,不包括加密签名。因此,OAuth 2 令牌可用于通过 https 进行克隆。

这是我创建一个新的 OAuth 2 访问/承载令牌并使用它来克隆我的一个私人存储库的转储:

$ curl https://bitbucket.org/site/oauth2/access_token \
  -d grant_type=client_credentials \
  -u dqN7QFLwJEcHsHadYw:pzvZG25WEDqbm9aeUVRHtQRHgTRgDr9t
{
  "access_token": "He1rBW1eYAzmT3ePJcvYDtkIcF1Pb1izZHo8oqpKMEL5ivsku71qkjfumVgR2bWsCiRM7XeEmbVffxU92w==",
  "scopes": "repository email",
  "expires_in": 3600,
  "refresh_token": "pfcnxSpXNPAeTcYhcQ",
  "token_type": "bearer"
}
$ git clone "https://x-token-auth:JU5dAtlMD30BisLpDkIap7T18Ry9v6p0Xif4owkQUyen_rLx5_B3PjjeqhLhpde0ezR1wyGLeqYE2HA49A==@bitbucket.org/evzijst/crypt"
Cloning into 'crypt'...
remote: Counting objects: 26, done.
remote: Compressing objects: 100% (25/25), done.
remote: Total 26 (delta 8), reused 0 (delta 0)
Unpacking objects: 100% (26/26), done.
Checking connectivity... done.

现在请注意,OAuth 2 令牌会在一小时后过期。之后,他们将停止工作。根据您获取访问令牌的方式,您可能拥有一个刷新令牌。您可以在尝试克隆之前立即使用此刷新令牌发出新的访问令牌,以避免过期。

【讨论】:

  • 你知道 Bitbucket 是否有计划制作永不过期的身份验证令牌吗?如果我没记错的话,当您的令牌过期时,您的远程存储库 URL 将变为无效,这意味着您将无法在远程执行任何操作,直到您刷新新的访问令牌并使用该新访问令牌更新 url .对于 GIT 客户端的用户或开发人员来说,按小时进行维护非常麻烦。即使 GIT 客户端正确处理所有内容,该存储库也将在该小时过去后用户使用的任何其他 GIT 客户端中无法使用。
  • 是的,我们目前正在添加不会过期的 API 令牌,在我们宣布它们时可能会被命名为“应用密码”(命名仍在讨论中)。
  • 是否可以在没有回调url的情况下获取访问令牌?将您的示例与 curl 请求一起使用时,我收到无效的 url “没有为 OAuth 客户端定义回调 uri”。
  • 这是一个命令行中的所有内容git clone "https://x-token-auth:$(curl -X POST -u "[CONSUMER_KEY]:[CONSUMER_SECRET]" https://bitbucket.org/site/oauth2/access_token -d grant_type=client_credentials | grep -Po '(?<="access_token": ")[^"]*')@bitbucket.org/[USER_OR_COMPANY]/[REPO_NAME].git"
【解决方案4】:

使用 token 操作 Bitbucket 存储库:

  1. 首先,您在 bitbucket 帐户设置的访问管理部分创建一个“Oauth”。这给了你一个“钥匙”和一个“秘密”。你已经完成了这一点。

  2. 现在使用这些 Key 和 Secret,您可以向 Bitbucket 索要一个令牌。就我而言,我向https://bitbucket.org/site/oauth2/access_token 发出了http 请求。我可以用 Curl 或像这样的一些 Ajax 库来做到这一点:

    curl -X POST -u "yourKeyHere:yourSecretHere"  https://bitbucket.org/site/oauth2/access_token -d  grant_type=client_credentials
    

    或者,我的 http 请求是这样的(在节点中使用超级代理),我的 Content-Type 设置为 application/x-www-form-urlencoded,您可以使用邮递员:

    request.post("https://yourKeyHere:yourSecretHere@bitbucket.org/site/oauth2/      access_token").send('grant_type=client_credentials');`
    

    结果是这样的:

    {
       "access_token": "blah blah blah HXAhrfr8YeIqGTpkyFio=",
       "scopes": "pipeline snippet issue pullrequest project team account",
       "expires_in": 3600,
       "refresh_token": "hsadgsadvkQ",
       "token_type": "bearer"
    }
    
  3. 现在你有了“access_token”,用它克隆一个私有仓库。但是你的 repo 的 url 应该是这样的(在令牌周围保留括号):

    https://x-token-auth:{tokenHere}@bitbucket.org/yourRepoOwnerHere/RepoNameHere.git
    

【讨论】:

  • 以上描述为假。
  • @SunilSharma 真的吗?哪一点?我一直在用它。
  • `request.post("yourKeyHere:yourSecretHere@bitbucket.org/site/oauth2access_token").send('grant_type=client_credentials');``不工作
  • 今天我收到一条错误消息,例如“如果您通过第三方服务登录,则必须确保在您的帐户配置文件中设置了帐户密码。”当我尝试简单地git clone https://x-token-auth:{tokenHere}@bitbucket.org/yourRepoOwnerHere/RepoNameHere.git。希望这适用于其 v2 API 中的普通 API 端点。
  • 我去掉了 .git 并在整个 URL 和宾果周围加上了双引号!
【解决方案5】:

我知道这是一个相当老的线程,但为了以防万一,我编写了自己的凭证存储来管理 bitbucket 的令牌:

https://github.com/gildas/git-credential-bitbucket

【讨论】:

    猜你喜欢
    • 2022-01-20
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 2019-04-29
    • 2020-02-23
    • 2020-10-06
    • 2017-08-28
    • 1970-01-01
    相关资源
    最近更新 更多