Git 如何使用令牌操作Bitbucket存储库?

Git 如何使用令牌操作Bitbucket存储库?,git,oauth,mercurial,bitbucket,Git,Oauth,Mercurial,Bitbucket,我按照此文档从bitbucket获取令牌值和令牌密钥: 在此之后,我想使用该令牌推/拉到给定的回购 在Github,我可以这样使用令牌: 我的问题是如何在bitbucket(mercurial/git)上使用这种http授权 我们最近引入了OAuth2,并添加了将其用作的功能 使用访问令牌克隆存储库 由于加载项将无法上载自己的SSH密钥以进行克隆,因此访问令牌可以用作通过HTTPS安全克隆的基本HTTP身份验证凭据 git clone https://x-token-auth:{access

我按照此文档从bitbucket获取令牌值和令牌密钥:

在此之后,我想使用该令牌推/拉到给定的回购

在Github,我可以这样使用令牌:

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

我们最近引入了OAuth2,并添加了将其用作的功能

使用访问令牌克隆存储库 由于加载项将无法上载自己的SSH密钥以进行克隆,因此访问令牌可以用作通过HTTPS安全克隆的基本HTTP身份验证凭据

git clone https://x-token-auth:{access_token}@bitbucket.org/user/repo.git
需要使用文本字符串
x-token-auth
代替用户名

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


请参阅“”中的更多信息,如所建议。

首先:只有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 Cpanel创建的。完成此操作后,我使用用户名和新应用程序密码克隆了repo,如下所示:

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

要使用令牌操作Bitbucket存储库

  • 首先,在bitbucket帐户设置的访问管理部分创建一个“Oauth”。这会给你一把“钥匙”和一个“秘密”。你做了这一点

  • 现在,使用这些密钥和密码,您可以向Bitbucket请求令牌。在我的例子中,我向
    https://bitbucket.org/site/oauth2/access_token
    。我可以使用Curl或类似以下的Ajax库来实现:

    curl -X POST -u "yourKeyHere:yourSecretHere"  https://bitbucket.org/site/oauth2/access_token -d  grant_type=client_credentials
    
    或者,我的http请求是这样的(在节点中使用superagent),我的
    内容类型设置为
    application/x-www-form-urlencoded
    ,您可以使用postman:

    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"
    }
    
  • 现在您有了“访问令牌”,可以用它克隆一个私有回购。但是你的回购协议的url应该是这样的(把括号放在令牌周围):


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


    自2015年6月以来,这似乎得到了官方支持。我在下面相应地编辑了我的答案。你知道Bitbucket是否有任何计划来制作非过期的身份验证令牌吗?如果我没有弄错的话,当令牌过期时,您的远程存储库URL将变得无效,这意味着您将无法在远程上执行任何操作,直到您刷新新的访问令牌并使用该新的访问令牌更新URL。对于GIT客户机的用户或开发人员来说,每小时维护一次都是相当麻烦的。即使GIT客户端正确地处理了所有事情,该存储库也将在用户使用的任何其他GIT客户端中无法使用。是的,我们目前正在添加未过期的API令牌,在我们宣布它们时,这些令牌可能被命名为“应用程序密码”(命名仍在讨论中)。是否可以在没有回调url的情况下获取访问令牌?在使用curl请求的示例时,我收到无效的url“没有为OAuth客户端定义回调uri”。以下是单个命令行
    git clone中的所有内容https://x-token-auth:$(curl-X POST-u“[CONSUMER\u KEY]:[CONSUMER\u SECRET]”https://bitbucket.org/site/oauth2/access_token -d grant_type=客户_凭证| grep-Po'(?@ArtoBendiken他们是几年前发布的:上面的描述是错误的。@SunilSharma真的吗?哪一部分?我一直在使用它。`request.post(“access\u token”).send('grant\u type=client\u credentials');`not workingAs of the today我收到一条错误消息,如'如果您通过第三方服务登录,您必须确保在您的帐户配置文件中设置了帐户密码https://x-token-auth:{tokenHere}@bitbucket.org/yourRepoOwnerHere/RepoNameHere.git
    。希望这对v2 API中的普通旧API端点有效。我去掉了.git,在整个URL和bingo周围加了双引号!文档似乎在用x-token-auth代替用户名时出现了这个错误,因为它对我不起作用,但上面剩下的@Psymatix链接起作用了第二,[u user\u name]可以是回购协议所有者的用户/组的名称。因此,如果您是bubba,且回购协议由shrimpingcorp所有,则url将如下所示:
    https://bubba:[app_password]@bitbucket.org/shrimpingcorp/[repo_name].git
    如果我们现在能拿到JWT代币就好了!
    https://x-token-auth:{tokenHere}@bitbucket.org/yourRepoOwnerHere/RepoNameHere.git