如何获取 bitbucket 的 refresh_token?

How to get bitbucket's refresh_token?

我正在使用下面的 API

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

获得access_token但access_token在1小时后过期,我需要refresh_token但我无法在上面获得refresh_tokenAPI的回应。 以上 API 的响应是

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

你可以看到上面的回复中没有 或者有没有其他方法可以得到 refresh_token.

我想调用上面的 API 作为 GET 方法。

可以请人帮忙。

谢谢!

编辑:请注意,在重新审视这个问题后,我不得不说我下面的初始 "solution" 是不正确的。 比较合适。如果我造成任何混淆,我们深表歉意。


我正面临这个问题,感谢您在 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"
}

注意,关于refresh token本身,根据这个comment from Atlassian team member:

只需要请求一次

... refresh tokens do not expire. [...] Access tokens expire as per the spec, refresh tokens do not expire.

我找到了一些解决方案。因为我在没有 server-side back-end 支持的情况下使用 browser-based 操作。在 Atlassian doc 中,他们提到隐式和 JWT 被排除在 refresh_tokens 之外。如果你也想要 refresh_token 那么你需要先使用 授权码授予

在浏览器中转到

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}