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

Firebase中GoogleAuthProvider返回的AccessToken过期后如何无感刷新?

你混淆了两种不同体系的访问凭证,这是你遇到问题的根本原因,以下是两个疑问的对应解答:

1. 如何正确刷新ya29开头的access token

你当前存储的ya29.开头的access token是Google OAuth 2.0服务签发的第三方访问凭证,不属于Firebase体系内的凭证,Firebase没有原生提供刷新该凭证的能力,需要通过Google OAuth的标准流程刷新:

  • 初始化GoogleAuthProvider时添加离线访问参数,确保能拿到Google签发的refresh token:
provider = new firebase.auth.GoogleAuthProvider();
// 新增以下配置,首次授权时加prompt: consent才会返回refresh token
provider.setCustomParameters({
  access_type: 'offline',
  prompt: 'consent'
})
  • 登录成功后,除了存储userCredential.credential.accessToken,还要同时存储userCredential.credential.refreshToken(注意这是Google的refresh token,不是Firebase用户对象的user.refreshToken)以及token的过期时间(默认3600秒)。
  • token快过期时,调用Google OAuth刷新接口获取新的ya29.开头的access token,请求参数如下:
    • 接口地址:https://oauth2.googleapis.com/token
    • 请求方式:POST
    • 必传参数:
      • grant_type: 固定值refresh_token
      • refresh_token: 你提前存储的Google refresh token
      • client_id: 你Firebase项目配置中对应的Google OAuth客户端ID
      • client_secret: 对应Google OAuth客户端的密钥
        返回的新access token即可正常通过https://www.googleapis.com/oauth2/v1/tokeninfo接口校验。

2. securetoken接口返回的令牌说明

你调用的securetoken.googleapis.com是Firebase Auth体系的官方刷新接口,返回的令牌不属于Google OAuth体系,自然不会以ya29.开头,这类令牌是Firebase签发的ID令牌,本质是JWT格式,通常以eyJh开头,作用如下:

  • 仅用于验证用户是否为你当前Firebase项目的合法注册用户
  • 可用于调用Firebase的各类云服务(如云存储、云函数、实时数据库等)的身份校验
  • 若要在你的Flask后端校验该类令牌,需要接入Firebase Admin SDK进行验签,无法通过Google的oauth2 tokeninfo接口校验
  • 你传入该接口的refresh token是Firebase体系的用户刷新凭证,和Google的refresh token完全独立,不能混用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:24:03