如何获取 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}
我正在使用下面的 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}