Dropbox API token过期 代码自动刷新令牌最快实现方法
Dropbox密码保护共享文件下载凭证自动刷新方案
为什么下载密码保护共享文件必须携带访问密钥
这是Dropbox开放接口的固定鉴权规则:哪怕是公开的带密码共享链接,调用sharing_get_shared_link_file接口时也必须携带有效身份凭证,匿名请求无法通过共享链接的密码校验环节,无法获取文件内容,和代码逻辑无关。
你之前手动在后台生成的是临时测试access token,本身设计有效期就只有数小时到数天,到期就会失效,必须手动更换。
自动刷新token的最快实现方案
用OAuth2的offline授权模式拿长期有效的refresh_token,一次配置后Dropbox SDK会自动完成短期access token的刷新,完全不需要人工手动替换令牌,实现步骤如下:
- 第一步:打开你之前创建应用的Dropbox开发者后台App Console页面,找到对应应用的权限配置项,勾选
files.content.read文件读取权限,保存配置后将「Token access type」设置为offline,该配置是获取长期刷新令牌的必要条件,online模式仅能生成短期临时token,无法自动续期。 - 第二步:运行一次一次性授权脚本,获取长期有效的refresh_token,这个令牌只要你不主动撤销应用授权、不重置应用密钥就不会过期,脚本代码如下:
import dropbox from dropbox import DropboxOAuth2FlowNoRedirect # 替换为你自己应用的对应参数 APP_KEY = "vixxx" APP_SECRET = "qrxxx" auth_flow = DropboxOAuth2FlowNoRedirect( APP_KEY, APP_SECRET, token_access_type='offline' ) authorize_url = auth_flow.start() print(f"请复制以下链接到浏览器打开,登录Dropbox账号完成授权:{authorize_url}") auth_code = input("授权完成后,将页面显示的授权码粘贴到此处:").strip() oauth_result = auth_flow.finish(auth_code) print(f"请保存好拿到的refresh_token,后续固定使用即可:{oauth_result.refresh_token}")
- 第三步:替换原有下载代码的初始化逻辑,传入refresh_token初始化客户端,后续SDK会自动在token过期时完成刷新,不需要人工干预,最终可长期运行的下载代码如下:
import dropbox # 固定配置项,可存入本地配置文件长期使用 APP_KEY = "vixxx" APP_SECRET = "qrxxx" REFRESH_TOKEN = "上一步获取到的长期refresh_token" # 初始化客户端,SDK自动处理token刷新逻辑 dbx = dropbox.Dropbox( oauth2_refresh_token=REFRESH_TOKEN, app_key=APP_KEY, app_secret=APP_SECRET ) # 文件下载逻辑和原有逻辑完全一致 with open("rc.xlsx", "wb") as f: shared_link = "https://www.dropbox.com/s/e9xxxxxxx.xlsx?dl=0" metadata, res = dbx.sharing_get_shared_link_file( url=shared_link, link_password='xxx1' ) f.write(res.content)
注意:如果后续你在后台重置了应用密钥、或者主动撤销了该应用的账号授权,refresh_token才会失效,届时只需要重新跑一次第二步的授权脚本拿新的refresh_token即可,日常运行不会出现几天就过期需要手动换token的问题。
内容的提问来源于stack exchange,提问作者PyDeveloper
相关产品推荐
相关产品推荐

