如何为桌面应用获取Google Drive API访问权限,解决授权过期问题
Google Drive API 非网页应用长期授权方案
你遇到的短期授权过期问题和应用是否完成官方验证无关,核心原因是默认授权流程没有申请离线访问权限,只能拿到有效期几小时的短期访问令牌,没有可用于自动续期的刷新令牌。以下是可直接落地的解决方案:
1. 调整Google Cloud控制台配置
- 进入你的项目对应的OAuth同意屏幕配置页,将应用发布状态设置为测试,无需提交官方验证
- 在「测试用户」列表中添加你自己的Google账号,测试状态下该账号的授权不受7天过期限制(未添加到测试列表的外部用户授权才会7天过期)
2. 修改PyDrive2授权代码,申请离线权限
在初始化授权时加入access_type=offline参数,要求Google返回长期有效的刷新令牌,参考代码如下:
from pydrive2.auth import GoogleAuth from pydrive2.drive import GoogleDrive gauth = GoogleAuth() # 配置离线访问权限,强制返回刷新令牌 gauth.GetFlow() gauth.flow.params["access_type"] = "offline" gauth.flow.params["approval_prompt"] = "force" # 凭证读写逻辑,适配无交互运行场景 gauth.LoadCredentialsFile("gdrive_credentials.json") if gauth.credentials is None: # 首次运行需要在有图形环境的终端执行,唤起浏览器完成授权 gauth.LocalWebserverAuth() elif gauth.access_token_expired: # 自动刷新过期的访问令牌,无需人工操作 gauth.Refresh() else: gauth.Authorize() # 保存最新的凭证到本地 gauth.SaveCredentialsFile("gdrive_credentials.json") drive = GoogleDrive(gauth)
3. 适配cron定时运行
- 首次在有桌面环境的Linux终端执行一次脚本,完成授权后会在本地生成
gdrive_credentials.json凭证文件 - 后续配置cron任务时,确保脚本运行的工作目录能读取到该凭证文件即可,无需再进行人工授权,访问令牌过期会自动刷新
注意事项
- 测试状态的应用最多支持添加100个测试用户,个人自用完全足够,不需要填写应用主页、提交官方验证
gdrive_credentials.json包含你的Google Drive完整访问权限,不要上传到公开代码仓库或泄露给其他人- 如果刷新令牌失效(比如你主动在Google账号安全设置里撤销了应用授权),只需要删除旧的凭证文件重新执行一次授权流程即可
内容的提问来源于stack exchange,提问作者kwiqsilver
相关产品推荐
相关产品推荐

