如何修改Google Access Token的过期时间(PHP OAuth 2.0场景)
核心前提澄清
谷歌OAuth 2.0的*访问令牌(access_token)有效期固定为1小时,这个是谷歌平台的强制限制,没有任何办法手动调整延长。你了解到的200天最长有效期,实际是**刷新令牌(refresh_token)**的最长有效期,你要实现的长期免登录,本质是通过刷新令牌自动换新的访问令牌,不需要用户重复授权。
你现有代码已经配置了离线访问模式,只需要做以下调整就能实现最长200天的有效期支持:
必要配置调整
- 首先把你谷歌云控制台的OAuth应用从「测试状态」改成「正式发布状态」:
测试状态下的应用刷新令牌默认只有7天有效期,只有正式发布的应用才能拿到最长200天的刷新令牌。操作路径:谷歌云控制台 → API和服务 → OAuth同意屏幕 → 点击「发布应用」即可,非敏感权限的应用不需要提交官方审核即可生效。 - 确认你的授权配置保留
setPrompt('select_account consent')参数:
刷新令牌仅在用户第一次授权时返回一次,加这个参数可以保证每次用户走授权流程时,都会重新下发刷新令牌,避免你丢失原有刷新令牌后无法重新获取。
现有代码优化点
你当前的自动刷新逻辑已经完全可用,只需要额外注意两个细节即可:
- 保存
token.json的目录权限要保证可写,每次刷新访问令牌后,谷歌PHP客户端会自动把新的访问令牌和有效刷新令牌同步写入token.json,不需要你额外处理。 - 避免同一个用户频繁生成新的刷新令牌:同一个谷歌用户对同一个应用最多只能保留50个有效刷新令牌,超过上限后最早生成的刷新令牌会自动失效。
刷新令牌失效的常见场景
满足以下任意一种情况,刷新令牌会提前失效,需要用户重新授权:
- 用户主动在谷歌账号的安全设置中,撤销了对你应用的授权
- 你的应用连续6个月没有任何API调用请求
- 你修改了OAuth同意屏幕的配置项(比如应用名称、图标、权限范围等)
- 应用处于测试状态时生成的刷新令牌,在应用发布正式版后会全部失效
内容的提问来源于stack exchange,提问作者HIMANSHU SINGH
相关产品推荐
相关产品推荐

