如何解决使用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_token
和refresh_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 举报,一经查实,本站将立刻删除。