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

Firebase App Check大量无效令牌问题求助及审计方法咨询

Firebase App Check 无效令牌问题排查求助

我尝试使用Firebase App Check保护Firebase实时数据库访问权限,但遇到了约30%-40%的无效令牌问题。App Check API已在应用中部署超过一年,确认所有用户都在使用集成了新版完整性API的稳定版本。启用检查后数分钟内就有合法用户反馈无法访问数据库,不得不关闭该功能。已提升每日请求配额,但问题未改善;联系Firebase支持团队未得到有效帮助。求指导如何审计这些无效令牌以定位问题根源。

登录页App Check初始化代码

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sign_in);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    SplashScreen splashScreen = SplashScreen.installSplashScreen(this);

    // Initialize Google Auth login
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestIdToken(getString(R.string.server_client_id)).requestEmail().build();
    mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

    // Initialize Firebase
    FirebaseApp.initializeApp(this);

    // Initialize Firebase AppCheck
    FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance();
    if (DEBUG) {
        firebaseAppCheck.installAppCheckProviderFactory(DebugAppCheckProviderFactory.getInstance());
        Log.w(TAG, "Firebase App Check instaled in DEBUG mode ******************");
    } else {
        firebaseAppCheck.installAppCheckProviderFactory(PlayIntegrityAppCheckProviderFactory.getInstance());
        Log.w(TAG, "Firebase App Check instaled in RELEASE mode ******************");
    }
}

无效令牌排查方案

  • 开启App Check详细日志:在Firebase控制台的App Check页面启用日志记录,查看无效令牌对应的错误码:
    • EXPIRED:检查客户端令牌缓存与刷新逻辑,确保请求时使用的是未过期令牌
    • INVALID_SIGNATURE:核对Play Integrity Provider配置,确认包名、发布版本的SHA-256指纹与控制台完全一致
    • UNAUTHORIZED:排查是否存在未集成App Check的旧版本应用请求,或设备被Play Integrity判定为高风险(如root、自定义ROM)
  • 客户端日志补充:在客户端添加令牌获取结果的日志,记录令牌获取成功/失败状态、有效期,排查是否存在令牌获取失败但仍发起数据库请求的场景
  • 边缘场景测试:
    • 测试Android 8.0及以下版本设备,确认Play Integrity兼容性
    • 测试应用后台唤醒后的请求场景,验证令牌自动刷新机制是否正常
    • 检查用户设备是否禁用Google Play服务,这类设备无法通过Play Integrity验证
  • 数据库规则校验:确认实时数据库安全规则中App Check验证逻辑正确,示例规则:
    {
      "rules": {
        ".read": "request.app != null",
        ".write": "request.app != null"
      }
    }
    
    避免规则中额外的错误逻辑拦截合法请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 03:12:43