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

尝试从Firebase更新FCM的ID(Bearer)令牌时遇INVALID_REFRESH_TOKEN错误

解决FCM设备ID令牌过期后刷新失败(INVALID_REFRESH_TOKEN)的问题

你的核心问题是误用了OAuth 2.0 Playground的刷新令牌,而非Firebase Auth提供的设备级刷新令牌。以下是具体解决步骤:

  • 明确令牌类型差异:
    OAuth Playground生成的刷新令牌是针对个人Google账号的OAuth授权令牌,受众(audience)指向Google通用API;而securetoken.googleapis.com接口需要的是Firebase Auth专属刷新令牌,这个令牌绑定你的Firebase项目与设备身份,两者完全不兼容。

  • 改用Firebase匿名认证获取正确的刷新令牌:
    因你的应用无登录系统,适合用Firebase匿名认证生成设备级身份令牌。iOS端通过Firebase SDK获取令牌的示例代码(Swift):

    import FirebaseAuth
    
    // 应用启动时执行匿名登录
    Auth.auth().signInAnonymously { authResult, error in
        guard let user = authResult?.user else {
            // 处理登录错误
            return
        }
        
        // 获取可直接使用的ID令牌(Bearer令牌)
        user.getIDTokenForcingRefresh(true) { idToken, error in
            if let idToken = idToken {
                // 将idToken用于FCM相关请求的Bearer认证
            }
        }
        
        // 保存刷新令牌,用于后续过期时刷新ID令牌
        let refreshToken = user.refreshToken
    }
    
  • 正确构造刷新令牌的curl请求:
    用从Firebase SDK获取的refreshToken替换当前的OAuth Playground令牌,请求格式保持不变:

    curl 'https://securetoken.googleapis.com/v1/token?key=AI_REDACTED_2o' \
    -H 'Content-Type: application/x-www-form-urlencoded' \
    --data 'grant_type=refresh_token&refresh_token=YOUR_FIREBASE_REFRESH_TOKEN'
    
  • 验证令牌有效性:
    可通过JWT解析工具查看令牌的aud(受众)字段,正确的Firebase Auth令牌aud应为你的Firebase项目ID,而OAuth Playground令牌的aud指向Google API端点,这就是返回INVALID_REFRESH_TOKEN的根本原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:48:11