如何使用Dropbox Python SDK正确实现刷新令牌?

6psbrbz9  于 2023-05-30  发布在  Python
关注(0)|答案(3)|浏览(136)

我尝试使用Dropbox Python SDK,但不断遇到短期访问令牌过期的问题。我想我终于找到了一个解决方案,但我相当肯定这不是我应该如何实现它。我使用的过程如下:
1.从官方Dropbox Python SDK github复制示例代码
1.在第20行后添加了print(f"Refresh token: {oauth_result.refresh_token}"),以实际查看REFRESH_TOKEN
1.将我的脚本从使用dbx = dropbox.Dropbox(dbx_token)更改为dbx = dropbox.Dropbox(oauth2_refresh_token=REFRESH_TOKEN, app_key=APP_KEY)。其中REFESH_TOKEN是从示例脚本打印的内容。
如果这是完全错误的,请让我知道。然而,它似乎工作到目前为止。
旁注:我正在编写的脚本的目的是每天检查一次特定Dropbox文件夹中的新文件,然后将共享链接发送到我的团队使用的特定Slack频道。不确定这是否相关,但决定包括以防万一。

zsohkypk

zsohkypk1#

修改您的OAuth URL以包含token_access_type='offline'并初始化Dropbox。Dropbox与刷新令牌和应用密钥应该是正确的。

kadbb459

kadbb4592#

Dropbox刷新令牌可重复使用,并且在明确撤销之前不会过期。获得刷新令牌后,只需将其用作创建dropbox对象的参数。

import dropbox

dbx = dropbox.Dropbox(
            app_key = <APP_KEY>,
            app_secret = <APP_SECRET>,
            oauth2_refresh_token = <REFRESH_TOKEN>
        )

如果需要获取刷新令牌的帮助,请参阅this answer

2ul0zpep

2ul0zpep3#

获取新的访问代码:

https://www.dropbox.com/oauth2/authorize?client_id=<APP_KEY>&token_access_type=offline&response_type=code

使用访问代码获取刷新令牌:

curl --location --request POST 'https://api.dropboxapi.com/oauth2/token' \
-u '<APP_KEY>:<APP_SECRET>' \
-H 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'code=<ACCESS_CODE>' \
--data-urlencode 'grant_type=authorization_code'

现在你有了一个刷新令牌,你可以在代码中获取访问令牌:

curl https://api.dropbox.com/oauth2/token \
   -d refresh_token=REFRESHTOKENHERE \
   -d grant_type=refresh_token \
   -d client_id=APPKEYHERE \
   -d client_secret=APPSECRETHERE

要使用Python:

import requests

data = {
    'refresh_token': 'REFRESHTOKENHERE',
    'grant_type': 'refresh_token',
    'client_id': 'APPKEYHERE',
    'client_secret': 'APPSECRETHERE',
}

response = requests.post('https://api.dropbox.com/oauth2/token', data=data)

这篇文章可以帮助你:
https://www.codemzy.com/blog/dropbox-long-lived-access-refresh-tokenhttps://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/Get-refresh-token-from-access-token/td-p/596739

相关问题