微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用grant_type = refresh_token时,不会从Dropbox API返回刷新令牌

如何解决使用grant_type = refresh_token时,不会从Dropbox API返回刷新令牌

我已经使用OAuth 2.0(Google云端硬盘,Box,DropBox等)将许多云存储提供商集成到我的应用程序中。我正在使用token_access_type=offline授权并将刷新令牌存储在数据库中,以便可以根据需要获取新的访问令牌。

当我使用DropBox v2 API时,使用/token调用grant_type=refresh_token端点不会在响应中同时返回access_tokenrefresh_token。由于某种原因,我只会得到access_token

我已经验证我正在传递最初用/token调用grant_type=authorization_code时返回的刷新令牌。我的要求如下:

curl https://api.dropBox.com/oauth2/token \
    -d grant_type=refresh_token \
    -d refresh_token=<RefreshTokenReturnedFromAuthorizationCodeExchange> \
    -u <MyAppKey>:<MyAppSecret>

多次发出此请求(使用相同的刷新令牌)每次都会生成一个新的访问令牌,但没有刷新令牌。返回的访问令牌似乎按预期工作。这与其他服务提供商不同,并且似乎与DropBox api文档相矛盾,该文档指出只要我获得refresh_token的授权,就会返回token_access_type=offline

DropBox是否发行旨在像这样重用的刷新令牌? DropBox刷新令牌会过期吗?

解决方法

这是预期的行为。使用grant_type=refresh_token时,the Dropbox API /oauth2/token endpoint也不会返回新的刷新令牌。发出新的刷新令牌是可选的in the OAuth 2 spec

授权服务器可以发布新的刷新令牌

因此,尽管Dropbox API文档确实说:

如果在调用/ oauth2 / authorize时将token_access_type设置为脱机,则响应将包括刷新令牌(refresh_token)。

那实际上只是指最初的grant_type=authorization_code请求,而不是随后的grant_type=refresh_token请求。我会要求团队更新文档以澄清这一点。

Dropbox API刷新令牌本身不会过期,因此您可以重新使用它们(尽管它们可以被用户或应用随时撤消)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。