使用GRANT_TYPE=REFRESH_TOKEN时,Dropbox API不返回刷新令牌

人气:184 发布:2023-01-03 标签: dropbox-api

问题描述

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

当我使用Dropbox v2API时,使用grant_type=refresh_token调用/token终结点时,在响应中不会同时返回access_tokenrefresh_token。由于某些原因,我只能得到access_token

我已经验证了我正在传递刷新令牌,该令牌在我最初使用grant_type=authorization_code调用/token时返回给我。我的请求如下所示:

curl https://api.dropbox.com/oauth2/token 
    -d grant_type=refresh_token 
    -d refresh_token=<RefreshTokenReturnedFromAuthorizationCodeExchange> 
    -u <MyAppKey>:<MyAppSecret>
多次发出此请求(使用相同的刷新令牌)每次都会生成一个新的访问令牌,但不会生成刷新令牌。返回的访问令牌似乎按预期工作。这与其他服务提供商不同,似乎也与Dropbox API文档中声明的只要我授权token_access_type=offline就会返回refresh_token相矛盾。

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刷新令牌本身不会过期,因此您可以重新使用它们(尽管用户或应用可以随时吊销它们)。

21