我正在使用以下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方法。
可以请别人帮忙。
谢谢!
答案 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,则需要先使用授权码授予。