iOS与Android部分用户触发INVALID_APP_CREDENTIAL错误排查求助
解决Identity Platform短信验证返回INVALID_APP_CREDENTIAL错误
问题概述
Node.js后端部署在Cloud Run,采用ADC认证对接Google Identity Platform短信验证流程:iOS/Android原生应用先获取reCAPTCHA v2令牌,调用后端后,后端再请求https://identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode接口发送验证码。核心代码如下:
import { GoogleAuth } from "google-auth-library"; const body = { phoneNumber: phoneNumber.toString(), recaptchaToken: deviceCheck.recaptchaToken, autoRetrievalInfo: platform === "android" ? { appSignatureHash: androidAppSignatureHash, } : undefined, quotaUser: quotaPeer.toString(), }; const result = await fetch( "https://identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode", { method: "POST", headers: { ...(await auth.getRequestHeaders()), ...(platform === "ios" ? { "x-ios-bundle-identifier": iosAppBundleIdentifier } : {}), }, body: JSON.stringify(body), }, );
部分请求返回400错误:
{"error":{"code":400,"message":"INVALID_APP_CREDENTIAL","errors":[{"message":"INVALID_APP_CREDENTIAL","domain":"global","reason":"invalid"}]}}
已排除OAuth令牌过期、reCAPTCHA令牌无效问题,对比Firebase SDK实现未发现差异,问题影响大量用户登录,需定位解决。
排查与修复方案
1. 校验Android应用签名哈希
- 确认
appSignatureHash是SHA-1哈希的Base64编码(非原始十六进制格式),且与Identity Platform控制台中配置的安卓应用签名哈希完全一致 - 区分发布版/调试版签名哈希,若用户使用发布包,需确保控制台已添加对应发布版哈希
- 用以下命令重新生成哈希,对比后端传入值:
keytool -exportcert -alias YOUR_KEY_ALIAS -keystore YOUR_KEYSTORE_PATH | openssl sha1 -binary | openssl base64
2. 核对iOS Bundle Identifier
- 确保
x-ios-bundle-identifier请求头的Bundle ID与Identity Platform控制台配置的iOS应用Bundle ID完全匹配(大小写敏感) - 排查多环境(测试/生产)Bundle ID混用情况,比如测试应用调用生产后端,但后端传入生产Bundle ID
3. 检查ADC服务账号权限
- Cloud Run使用的ADC服务账号需拥有
Identity Toolkit Admin角色,或至少具备identitytoolkit.accounts.sendVerificationCode权限 - 确认服务账号已添加到项目成员中,权限未被撤销
4. 验证reCAPTCHA令牌与应用的绑定
- 客户端生成的reCAPTCHA v2令牌需与对应平台应用绑定:
- Android端:reCAPTCHA站点密钥需关联正确的应用签名哈希
- iOS端:reCAPTCHA站点密钥需关联正确的Bundle ID
- 通用reCAPTCHA密钥(未绑定应用)可能触发安全校验错误
5. 检查请求参数格式
phoneNumber必须符合E.164标准(如+1234567890),无多余空格或特殊字符quotaUser需为合法的唯一用户标识符,避免特殊字符- Android请求的
autoRetrievalInfo仅保留appSignatureHash字段,不要添加多余内容
6. 确认Identity Platform应用配置状态
- 登录Google Cloud Console,检查对应iOS/Android应用在Identity Platform中处于启用状态
- 排查是否有应用配置被意外修改(如签名哈希、Bundle ID被删除/更新)
- 验证项目的Identity Platform API已启用(Cloud Console -> API与服务 -> 已启用的API)
内容的提问来源于stack exchange,提问作者Julien Fouilhé
相关产品推荐
相关产品推荐

