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

Google Authentication API令牌无法自动刷新问题求助

Google API令牌刷新失败的原因及修复方案

核心问题分析

  • 重新下载的credentials.json(OAuth客户端密钥)与旧的token.json不匹配:Refresh Token和OAuth客户端的Client ID/Client Secret是绑定的,若重新创建OAuth客户端并下载新密钥文件,旧token.json里的refresh token会直接失效,无法用于刷新令牌。
  • 代码缺失刷新失败的异常处理:当前逻辑仅判断credentials.expired and credentials.refresh_token就尝试刷新,但如果刷新抛出异常(比如refresh token无效),程序会直接崩溃,不会触发重新授权流程。

修复后的代码实现

def main():
    global credentials
    credentials = None
    client_secrets_path = r"C:/Users/Owner/Desktop/Code/Code/credentials.json" 
    if os.path.exists("token.json"):
        credentials = Credentials.from_authorized_user_file("token.json", SCOPES)
    
    # 验证凭据有效性,处理刷新失败的情况
    if not credentials or not credentials.valid:
        refresh_success = False
        if credentials and credentials.expired and credentials.refresh_token:
            try:
                credentials.refresh(Request())
                refresh_success = True
            except Exception as e:
                # 刷新失败,删除无效token文件,触发重新授权
                os.remove("token.json")
                credentials = None
        
        if not refresh_success or not credentials:
            flow = InstalledAppFlow.from_client_secrets_file(client_secrets_path, SCOPES)
            credentials = flow.run_local_server(port=0)
        
        # 保存新的凭据
        with open("token.json", "w") as token:
            token.write(credentials.to_json())

额外注意事项

  • 不要随意更换OAuth客户端密钥:若必须更换,需删除旧的token.json,重新走授权流程生成新的token。
  • 确保OAuth客户端类型正确:你使用的InstalledAppFlow对应OAuth客户端类型应为桌面应用,若选成其他类型(如Web应用),可能导致refresh token无法正常生成或使用。
  • 检查OAuth客户端权限:确保客户端已启用对应API服务,且SCOPE设置与授权时完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 07:52:05