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

内部用户类型Google Workspace中OAuth refresh_token是否设有效期?

Google OAuth 凭据有效期规则说明

你观察到的测试应用refresh_token7天有效期是Google OAuth平台的强制规则,和你本地生成credentials.json的代码逻辑无关,不同发布状态下的凭据有效期规则如下:

  • 应用发布状态为测试时:所有通过授权流程拿到的refresh_token固定有效期为7天,到期自动失效,无论你刷新access_token的频率多高,都无法延长这个有效期,失效后必须重新走手动授权流程才能获取新的有效refresh_token。
  • 应用发布状态为内部(仅Google Workspace组织账号可选择):面向组织内账号授权时不需要提交OAuth合规审核,拿到的refresh_token默认长期有效,仅以下场景会失效:
    • 对应账号在Google账号安全页手动撤销了应用的授权
    • 你在Google Cloud控制台重置了对应OAuth客户端的client_secret
    • 该refresh_token连续6个月未被用于刷新access_token
    • 应用配置的授权SCOPE发生变更
  • 应用发布状态为生产(面向外部用户):如果使用的是个人Gmail账号创建的项目,设置为生产状态后即使未通过OAuth审核,自己账号授权拿到的refresh_token也没有7天有效期限制,仅会在授权时弹出「应用未验证」的风险提示,自行确认授权即可;如果要给外部非测试用户使用,则需要提交对应SCOPE的OAuth审核,审核通过后发放的refresh_token同样为长期有效。

现有代码说明与注意事项

你当前每2分钟用client_id、client_secret、refresh_token刷新access_token的逻辑是可正常运行的,access_token本身默认有效期为1小时,提前刷新不会触发平台限制,但要注意两个问题:

  1. 你当前引入的oauth2client库已经被Google官方弃用,长期维护建议替换为官方持续更新的google-auth、google-auth-oauthlib库
  2. 现有代码中os.path.join('credentials.json')没有实际路径拼接作用,可直接写文件路径字符串,不影响功能运行

提示:如果重新授权时没有拿到新的refresh_token,可以在构建flow时添加参数强制弹出授权确认页,确保返回完整凭据:

import os
from oauth2client import client, tools, file

SCOPES = 'https://mail.google.com/'

def generate_inicital_credentials():
    CLIENT_SECRET_FILE = 'client_secret.json'
    
    # creates credentials with a refresh token
    credential_path = 'credentials.json'
    store = file.Storage(credential_path)
    creds = store.get()
    if not creds or creds.invalid:
        flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
        # 强制返回refresh_token配置
        flow.params['approval_prompt'] = 'force'
        flow.params['access_type'] = 'offline'
        creds = tools.run_flow(flow, store)
    return creds

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 15:42:23