如何获得bitbucket的refresh_token?

时间:2018-03-08 08:37:25

标签: bitbucket token access-token bitbucket-api refresh-token

我正在使用以下API

https://bitbucket.org/site/oauth2/authorize?client_id={client_id}&response_type=token

获取access_token,但access_token在1小时内过期,我需要refresh_token,但我无法在上面的API响应中获得refresh_token。 上述API的响应是

https://www.example.com/#access_token={access_token}&scopes={scopes}&expires_in=3600&token_type=bearer

你可以在上面的反应中看到没有 或者是否有其他方法可以获得refresh_token。

我想将上述API称为GET方法。

可以请别人帮忙。

谢谢!

3 个答案:

答案 0 :(得分:3)

在浏览器中转到

https://bitbucket.org/site/oauth2/authorize?client_id={client_id}&response_type=code

使用您的Bitbucket帐户进行授权。

之后,您的浏览器将被重定向到

{your_redirect_link}/?code={code}

使用代码在终端中再次发出请求:

curl -X POST -u "{client_id:secret}" https://bitbucket.org/site/oauth2/access_token -d grant_type=authorization_code -d code={code}

响应如下所示:

{
  "access_token": "some_long_string",
  "scopes": "team webhook account issue wiki pipeline pullrequest project snippet",
  "expires_in": 7200,
  "refresh_token": "the_string_you_need",
  "token_type": "bearer"
}

现在您可以通过请求刷新access_token

curl -X POST -u "{client_id}:{secret}" https://bitbucket.org/site/oauth2/access_token -d grant_type=refresh_token -d refresh_token={refresh_token}

答案 1 :(得分:1)

编辑:请注意,在重新审视此问题后,我必须说出我最初的解决方案"以下是不正确的。 Petr's solution above更合适。如果我引起任何混淆,请道歉。

我正好面对这个问题,谢谢你进入SO!

更好的是,我刚刚找到了解决方案:您需要发出grant_type = client_credentials的请求:

curl -X POST -u "your_client_id:your_secret" \ 
     https://bitbucket.org/site/oauth2/access_token \
    -d grant_type=client_credentials

刷新令牌将包含在回复中:

{
    "access_token": "the_access_token",
    "expires_in": 3600,
    "refresh_token": "the_refresh_token",
    "scopes": "....",
    "token_type": "bearer"
}

请注意,关于刷新令牌本身,您只需根据此comment from Atlassian team member发出此请求一次:

  

...刷新令牌不会过期。 [...]访问令牌按照规范到期,刷新令牌不会过期。

答案 2 :(得分:0)

我得到了一些解决方案。因为我在没有服务器端后端支持的情况下使用基于浏览器的操作。在他们提到的Atlassian doc中,Implicit和JWT被排除在refresh_tokens之外。如果您还需要refresh_token,则需要先使用授权码授予