Firebase Storage与AppCheck大量未验证请求问题咨询
1. 存储并使用下载URL是否导致未验证请求?
是的,你通过getDownloadURL()获取的是带签名的临时URL(包含token参数),但当你把这个URL直接传给CachedNetworkImage加载时,这些请求是直接发向Firebase Storage的CDN,不会自动携带App Check Token——这就是你看到大量未验证请求的原因。
2. URL参数是否有误?
你提供的URL格式是正确的:
https://firebasestorage.googleapis.com/xxx/o/20267567567221.webp?alt=media&token=2667a8d4-7d1b-40df-8584-4af0673d4995
其中token是Firebase生成的签名令牌,仅用于验证该URL本身的合法性,它和App Check Token是完全不同的两类令牌,后者的作用是验证请求来自你的合法应用。
3. 是否需要手动添加App Check Token?
需要,但不能直接通过CachedNetworkImage默认逻辑实现——因为它的默认HTTP客户端不会自动携带App Check Token。你需要自定义HTTP客户端,在请求头中添加X-Firebase-AppCheck令牌:
示例代码:
// 获取App Check令牌 final appCheckToken = await FirebaseAppCheck.instance.getToken(); // 自定义HTTP客户端 final customHttpClient = HttpClient() ..addRequestCallback((request) { if (appCheckToken != null) { request.headers.add('X-Firebase-AppCheck', appCheckToken); } }); // 使用自定义客户端加载图片 CachedNetworkImage( imageUrl: images, httpClient: customHttpClient, );
4. 配置App Check后,标准下载URL的请求状态?
默认情况下,用getDownloadURL()获取的标准下载URL发起的请求是未验证的——Firebase Storage不会自动检查这些请求的App Check令牌,除非你在Firebase控制台的Storage规则里明确配置了App Check验证,同时你的请求也携带了正确的App Check令牌。
补充说明:getDownloadURL()这个获取URL的操作本身,如果你已经配置了App Check插件,Firebase SDK会自动携带App Check令牌去请求,所以这个步骤是已验证的;但后续用这个URL加载图片的请求,SDK不会自动处理,需要你手动添加令牌。
内容的提问来源于stack exchange,提问作者Cenk YAGMUR

