You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无UI SSH服务器上Python应用授权Google API的问题

无UI服务器下的Google Sheets API授权方案

问题分析

你当前通过本地生成token.json上传服务器的方式,30天后过期的核心原因是:默认授权流程未获取到长期有效的refresh_token,或同一应用多次授权后旧refresh_token被自动失效,导致服务器无法自动刷新凭证。

两种可行解决方案

方案一:修复本地授权流程,获取永久有效refresh_token

修改本地运行的代码,确保授权时强制获取长期可用的refresh_token,服务器后续可自动刷新凭证,无需重复上传:

  1. 授权前删除本地已有的token.json
  2. 修改代码中的授权逻辑,添加prompt='consent'参数:
flow = InstalledAppFlow.from_client_secrets_file("./json/credentials.json", SCOPES)
# 强制触发授权同意页面,确保返回refresh_token
googleCredentials = flow.run_local_server(port=0, prompt='consent')
  1. 在本地运行代码完成授权,将新生成的token.json上传到服务器
  2. 服务器上的代码会自动通过refresh_token刷新access_token,无需手动重复操作

方案二:直接在无UI服务器上完成授权(控制台模式)

无需本地操作,直接通过SSH连接的服务器控制台完成授权:

  1. 修改代码中的授权逻辑,替换run_local_server为run_console:
flow = InstalledAppFlow.from_client_secrets_file("./json/credentials.json", SCOPES)
# 使用控制台交互模式,适配无UI环境
googleCredentials = flow.run_console()
  1. 在服务器上运行代码,控制台会输出授权URL和验证码输入提示
  2. 在本地浏览器打开该URL,完成Google账号登录授权后获取验证码
  3. 将验证码输入服务器控制台,即可生成token.json,后续凭证会自动刷新

关键注意事项

  • 确保Google Cloud项目中,OAuth 2.0客户端类型为桌面应用(而非Web应用),否则无法生成有效refresh_token
  • 若refresh_token仍失效,检查Google账号安全设置,确认应用权限未被撤销
  • 多次授权后旧refresh_token失效时,重新生成一次token.json即可恢复自动刷新

内容的提问来源于stack exchange,提问作者Simonalbi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 03:31:03