Flutter应用集成Firebase App Check如何获取X-Firebase-AppCheck请求头
Flutter 端 Firebase App Check 对接自研后端实现指南
核心疑问解答
不需要额外进行Android/iOS原生开发,package:firebase_app_check/firebase_app_check.dart已经完整封装了SafetyNet(安卓,已废弃,推荐用Play Integrity)、App Attest(iOS)的底层校验和令牌获取逻辑,只要完成前置配置即可直接调用接口获取令牌。
客户端实现步骤
1. 激活App Check
在应用启动、完成Firebase初始化后,调用激活接口,可根据调试/生产环境配置不同的校验提供者:
import 'package:flutter/foundation.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_app_check/firebase_app_check.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); // 激活App Check await FirebaseAppCheck.instance.activate( // 安卓端:调试环境用debug提供者,生产环境用Play Integrity,旧项目可替换为AndroidProvider.safetyNet androidProvider: kDebugMode ? AndroidProvider.debug : AndroidProvider.playIntegrity, // iOS端:调试环境用debug提供者,生产环境用App Attest appleProvider: kDebugMode ? AppleProvider.debug : AppleProvider.appAttest, ); runApp(const MyApp()); }
调试阶段需要在Firebase控制台填入App Check调试令牌,否则调试版本应用无法通过校验获取有效令牌
2. 获取令牌并全局添加请求头
调用FirebaseAppCheck.instance.getToken()即可获取当前平台的有效App Check令牌,SDK会自动处理令牌过期刷新,无需手动管理生命周期。
如果使用dio作为网络请求库,可通过拦截器全局添加X-Firebase-AppCheck请求头:
import 'package:dio/dio.dart'; import 'package:firebase_app_check/firebase_app_check.dart'; final dio = Dio(); // 添加App Check请求头拦截器 dio.interceptors.add(InterceptorsWrapper( onRequest: (options, handler) async { final appCheckToken = await FirebaseAppCheck.instance.getToken(); if (appCheckToken != null) { options.headers['X-Firebase-AppCheck'] = appCheckToken; } return handler.next(options); }, ));
如果使用原生http库,封装公共请求方法,每次发起请求前添加请求头即可。
全流程运行逻辑
- 客户端激活App Check后,SDK会自动和Firebase服务器通信完成应用身份校验:安卓端通过Play Integrity/SafetyNet验证应用签名、包名和设备合法性,iOS端通过App Attest验证应用身份和设备合法性,校验通过后Firebase会下发短期有效的App Check令牌
- 每次发起请求到自研后端前,SDK自动获取有效令牌(过期会自动刷新)并塞进请求头
- 后端收到请求后通过Firebase Admin SDK校验
X-Firebase-AppCheck头的令牌有效性,校验通过则放行请求,否则直接拦截返回非法请求错误
内容的提问来源于stack exchange,提问作者user12051965
相关产品推荐
相关产品推荐

