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

Gáb*_*kos 16 git mercurial oauth bitbucket

我按照这个文档从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授权?

Psy*_*tix 25

我在设置 - >访问管理(侧边栏) - >应用程序密码下使用了我从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认同)

Von*_*onC 11

这个BitBucket页面提到:

我们最近引入了OAuth 2,并且还添加了将它们用作HTTP Basic Auth凭据的功能.

使用访问令牌克隆存储库

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

git clone https://x-token-auth:{access_token}@bitbucket.org/user/repo.git
Run Code Online (Sandbox Code Playgroud)

需要使用文字字符串x-token-auth作为用户名的替代.

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

根据nick graziano 的评论中的建议,在" Bitbucket Cloud上的OAuth "中查看更多内容.


Eri*_*jst 10

首先:只有OAuth 2令牌才能用于克隆回购

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

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

现在我们确实最近添加了对OAuth 2的支持,尽管它的名称是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.
Run Code Online (Sandbox Code Playgroud)

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

  • 你知道Bitbucket是否有计划制作非过期的身份证令?如果我没有弄错,当您的令牌过期时,您的远程存储库URL将变为无效,这意味着在您刷新新的访问令牌并使用该新访问令牌更新URL之前,您将无法对该遥控器执行任何操作.对于GIT客户端的用户或开发人员来说,每小时维护一次是非常麻烦的.即使GIT客户端正确处理所有内容,存储库也将无法在该小时过后用户使用的任何其他GIT客户端中使用. (5认同)
  • 这里是在一切单个命令行`GIT中克隆"https://开头的x令牌-AUTH:$(卷曲-X POST -u "[CONSUMER_KEY]:[CONSUMER_SECRET]" https://bitbucket.org/site/oauth2/-d的access_token = grant_type client_credentials | grep的-Po '(<?= "的access_token": ")[^"]*')@ bitbucket.org/[USER_OR_COMPANY]/[REPO_NAME]的.git"` (4认同)

Vah*_* PG 7

使用令牌操作Bitbucket存储库:

  1. 首先,在bitbucket帐户设置的访问管理部分创建"Oauth".这给你一个"钥匙"和一个"秘密".你做到了这一点.

  2. 现在使用这些Key和Secret,你会要求Bitbucket提供令牌.在我的情况下,我发了一个http请求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
    
    Run Code Online (Sandbox Code Playgroud)

    或者,我的http请求是这样的(在节点中使用superagent)和我的Content-Type设置application/x-www-form-urlencoded你可以使用postman:

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

    结果是这样的:

    {
       "access_token": "blah blah blah HXAhrfr8YeIqGTpkyFio=",
       "scopes": "pipeline snippet issue pullrequest project team account",
       "expires_in": 3600,
       "refresh_token": "hsadgsadvkQ",
       "token_type": "bearer"
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 现在你有了"access_token",用它克隆一个私人仓库.但你的回购的网址应该是这样的(保持括号周围的括号):

    https://x-token-auth:{tokenHere}@bitbucket.org/yourRepoOwnerHere/RepoNameHere.git
    
    Run Code Online (Sandbox Code Playgroud)