尝试从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
相关产品推荐
相关产品推荐

