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

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é

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:59:51