问题标签 [firebase-app-check]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
82 浏览

firebase - Firebase Appcheck 和 RecaptchaV3 提供程序

我想知道是否有人可以解释 Firebase AppCheck 和 Recaptchav3 之间的重叠。我有一个启用 AppCheck 并配置为使用 Recaptchav3 提供程序的公共 Web 应用程序。然而,使用 Recaptcha 的一个组成部分是验证客户的分数以确定是否拒绝请求。AppCheck 通过提供基于推荐人的证明来完成我的 Firebase 功能的工作,但是,我还没有找到检索 Recaptcha 分数的方法。

我尝试从 X-Firebase-AppCheck 标头中检索 AppCheck 令牌并将其提交给 Recaptcha 服务进行验证,但这会返回无效的用户响应错误。

所以我的问题是:是否可以从可调用函数上下文中检索 Recaptcha 分数?如果不是,这种情况通常如何处理?

我手动包含了 Recaptcha 脚本并在客户端检索了有效的令牌,但这相当于添加了两次 Recaptcha(第一次使用 AppCheck,第二次来自手动包含),感觉不对。

0 投票
1 回答
248 浏览

google-cloud-functions - Firebase Web + Functions + App 在本地主机上使用模拟器时检查身份验证错误

我为 firebase 功能运行本地模拟器。当我onCall从前端执行一个函数时,我在我的函数控制台中看到这条消息:

{"verifications":{"app":"VALID","auth":"MISSING"},"logging.googleapis.com/labels":{"firebase-log-type":"callable-request-verification"} ,"severity":"INFO","message":"可调用请求验证通过"}

我按照所有说明操作(在 Firebase 控制台中激活 App Check,连接 reCaptcha,并设置调试令牌),但仍然没有成功。有谁知道这里有什么问题?App Check 是否完全适用于使用模拟器的功能?

0 投票
0 回答
276 浏览

android - 重新连接到网络后如何获取有效的 Firebase appcheck 令牌?

我在我的 android 应用程序中使用 Firebase appcheck。它工作得很好,除了如果我在飞行模式下启动应用程序然后禁用飞行模式(即模拟在没有网络连接的情况下打开应用程序,然后获得网络连接)它总是失败。

当我没有连接时,我反复得到:

D/PersistentConnection: pc_0 - 试图获取授权令牌

D/PersistentConnection: pc_0 - 试图获取应用检查令牌

D/PersistentConnection: pc_0 - 成功获取令牌,打开连接

D/Connection: conn_2 - 打开一个连接

D/WebSocket:ws_2 - WebSocket 错误。

D/PersistentConnection: pc_0 - 由于 OTHER 断开连接

当我重新连接时,我得到:

W/PersistentConnection: pc_1 - Firebase 数据库连接被服务器强行终止。不会尝试重新连接。原因:appcheck 令牌无效

我正在我的 MainActivity onCreate() 方法中初始化应用程序检查,如下所示。我已尝试将以下代码移动到网络连接观察器中(如https://firebase.google.com/docs/database/android/offline-capabilities#section-connection-state中所述),但它不起作用。

我访问实时数据库的代码如下:

更广泛地说,是否有更好的方法来设置 appcheck 令牌,以便应用程序可以从错误的令牌中恢复?

不幸的是,这个 appcheck 的东西对我来说几乎是一个黑匣子。有关如何处理或调试它的任何提示都会有所帮助。

0 投票
0 回答
143 浏览

android - 在 Firebase 测试实验室设备上运行时如何获取有效的 appcheck 令牌?

我在 Firebase 测试实验室(例如 Pixel 3、Api Level 28)的各种设备上运行 robo 测试。由于应用检查令牌无效,测试设备无法从 Firebase 实时数据库加载数据。

相关日志包括:

09-17 21:33:30.327: D/WebSocket(1870): ws_0 - websocket 打开

09-17 21:33:30.327: D/WebSocket(1870): ws_0 - 重置 keepAlive

09-17 21:33:30.327: D/WebSocket(1870): ws_0 - ws 消息: {"t":"c","d":{"t":"s","d":"无效的 appcheck令牌"}}

09-17 21:33:30.328: D/WebSocket(1870): ws_0 - 重置 keepAlive。剩余:44999

09-17 21:33:30.328: D/WebSocket(1870): ws_0 - HandleNewFrameCount: 1

09-17 21:33:30.328: D/WebSocket(1870): ws_0 - handleIncomingFrame 完整帧: {t=c, d={t=s, d=Invalid appcheck token}}

09-17 21:33:30.328: D/Connection(1870): conn_0 - 得到控制消息: {t=s, d=Invalid appcheck token}

09-17 21:33:30.328: D/Connection(1870): conn_0 - 收到连接关闭命令。关机...

09-17 21:33:30.328: W/PersistentConnection(1870): pc_0 - Firebase 数据库连接被服务器强行终止。不会尝试重新连接。原因:appcheck 令牌无效

09-17 21:33:30.328: D/PersistentConnection(1870): pc_0 - 连接中断: server_kill

09-17 21:33:30.329: D/Connection(1870): conn_0 - 关闭实时连接

09-17 21:33:30.329: D/WebSocket(1870): ws_0 - websocket 正在关闭

09-17 21:33:30.329: D/PersistentConnection(1870): pc_0 - 由于 OTHER 断开连接

相同的构建在我的手机(Pixel 3)上运行并成功加载所有数据。

我想知道我是否需要做类似于“在 CI 环境中使用调试提供程序进行单元测试”(https://firebase.google.com/docs/app-check/android/debug-provider)中描述的事情,但这对我来说没有意义——这些是物理设备,对吧?(此外,我完全不清楚如何从 Firebase 控制台执行这些步骤)。

我将不胜感激任何提示或建议!谢谢你。

0 投票
1 回答
348 浏览

firebase - 如何限制 Firebase 云功能仅接受来自 Firebase 托管网站的请求

我有一个托管在Firebase Cloud Functions上的 Node.js API(使用 Express.js 构建)和一个托管在Firebase Hosting上的随附 Web 应用程序,它应该与上述 API 交互。

我想限制对 API 的调用,以便只有 Web 应用程序能够调用云函数。我怎样才能做到这一点?

我试过的:

  • 使用App Check或更准确地说是 Google 的网络应用程序 reCAPTCHA v3。我已将 Web 应用程序的域列入白名单,并且还激活了 App Check 令牌验证服务器端。然而,App Check 的问题是我能够从浏览器获取 reCAPTCHA 证明令牌(在通过 Web 应用程序进行身份验证之后)并将其用于从任何地方发出的请求。这使得从 Web 应用程序外部轰炸 API 成为可能,并首先破坏了使用 App Check 的目的。

    这里需要注意的是,在 Cloud Functions 中激活 App Check 的文档说明了functions.https.onCall(). 但是,由于我的 API 是使用 Express.js 构建的,因此我必须使用一种变通方法才能按照此处functions.https.onRequest()的说明使用。

  • 从 Google Cloud 控制台限制 Cloud Function 以仅允许同一项目的客户端按照此处的说明调用该函数。不幸的是,我在 Firebase Hosting 上托管的网络应用程序似乎不属于同一个 Google Cloud 项目。在 Firebase Hosting 上托管的应用不会出现在 Google Cloud 控制台中。此外,在将函数的Ingress 设置调整为“仅允许内部流量”后,我在尝试通过 Web 应用程序访问 API 时收到 CORS 错误。不过,我无法从其他任何地方访问 API,这部分是预期的结果。

在有人提议从 API 中限制 CORS 选项中的域之前,虽然这可能用于限制对 API 端点的访问,但它仍然允许快速调用该函数,因此可能会增加费用。

我很感激任何建议!

0 投票
0 回答
389 浏览

flutter - 无法让 AppCheck(在模拟器上调试)在 Flutter 应用程序上工作

我有一个颤振应用程序,添加 AppCheck 并使用 Android Emulator 进行测试和调试。我正在测试实时数据库的访问。在我的 Firebase 控制台中,AppCheck 显示我的所有访问权限都属于这种类型:未验证:无效请求。我遵循了这个:https ://firebase.google.com/docs/app-check/android/debug-provider 。

我的应用程序/build.gradle

在我的 main.dart

在 MainActivity.kt 中,我有以下内容:

从logcat,我可以看到以下日志

com.google.firebase.appcheck.debug.internal.DebugAppCheckProvider: Enter this debug secret into the allow list in the Firebase Console for your project: xxxxxxxxxxxxx

基于令牌,我使用托管调试令牌并将其设置为调试令牌。

使用 AppCheck

实时数据库仅显示未经验证的请求

我希望看到经过验证的请求出现。

我还使用 Android Studio profiler 来监控网络,我可以看到一个请求

POST https://firebaseappcheck.googleapis.com/v1beta/projects/<app>/apps/<appid>:exchangeSafetyNetToken?key=<key>

有效载荷中有一个 JSON 安全网令牌。

我得到 403 的响应。

请注意,我没有在实时数据库上启用强制。

AppCheck 缺少什么?我应该使用模拟器还是仅在真实物理设备(发布模式)上查看经过验证的请求?

0 投票
1 回答
195 浏览

iphone - 使用 Firebase JS SDK 的应用程序检查 Expo/React Native 应用程序

在我添加 Firebase App Check 之前,我基于 Expo 的 React Native 应用程序运行良好。

我使用的是 Firebase JS SDK 而不是 React Native Firebase,因为这里建议使用它进行跨平台开发。

现在我怎样才能获取然后发送context.auth(链接)到 Firebase 函数?或者如何手动发送 Firebase 存储所需的功能?

如果 AppCheck 和 AppAttest 未强制执行,存储似乎可以正常工作,但一旦我强制执行,每次从存储中加载用户未通过身份验证的图像时,该应用程序都会引发错误。

在此处输入图像描述

https://console.firebase.google.com/u/0/project/myapp-4fa75/settings/appcheck

0 投票
3 回答
519 浏览

javascript - 如何在 React 中使用 Firebase 应用程序检查。403 错误

我想在 Gatsby 项目中使用 Firebase App Check。我已经在 Firebase 控制台中完成了 App 注册。

在此处输入图像描述

在我的项目中:

但是,它不起作用并出现错误:

@firebase/app-check: FirebaseError: AppCheck: Fetch server 返回一个 HTTP 错误状态。HTTP 状态:403。(appCheck/fetch-status-error)。

那么,谁能帮我检查一下问题出在哪里?怎么解决?

谢谢!

0 投票
0 回答
21 浏览

firebase - Firebase (Flutter) - 尝试通过 getDownloadUrl() 访问云存储上的资源时应用检查失败

我正在使用 getDownloadUrl() 来获取云存储资源的下载 URL。最近,我刚刚在我的 Firebase 应用上启用了 AppCheck,这个下载 URL 需要一个 AppCheck 令牌才能访问。这种行为是有道理的,但我想知道是否有内置的方法来做到这一点?对于大多数 Firebase SDK,AppCheck 令牌是自动传递的,但似乎没有内置方法可以通过下载 URL 获得相同的自动行为。

我有一个理论上的解决方案,这是将 AppCheck 令牌作为 URL 请求中的标头传递,但没有关于此的文档,我不知道将这个令牌传递到哪个标头。我正在使用 Flutter,我正在通过 CachedNetworkImage 访问图像资源。任何关于我如何在不使用 Firebase SDK 的情况下通过 AppCheck 的见解将不胜感激。

0 投票
1 回答
210 浏览

firebase - 在 Web 本地开发中使用 AppCheck 时,我没有获得调试令牌

我决定将 AppCheck 包含到我的项目中。我正在使用 Quasar V2 的网络应用程序中实现这一点。Quasar 为我提供了一些环境变量,具体取决于我在开发、生产或调试中(它类似于生产,但带有 --debug 标志)。

我在 Firebase 控制台上有两个项目,用于我正在构建的这个产品。一个对应于我的测试,另一个对应于生产环境。请注意,当在某个分支中创建新 PR 时,我正在使用 GitHub 操作触发对 Firebase 托管的部署。这是由 firebase-cli 生成的。

最后,我有我的本地开发。它在模拟器中使用 Firebase 服务。

我的问题是我没有在浏览器控制台中获得调试令牌。这是我根据运行环境配置 Firebase 的客户端文件。

/src/boot/firebase.js

在文档(app-check 调试提供程序)中,他们有一个使用名为initializeAppCheck. 我的 SDK 中没有该功能。这是 Firebase SDK 中的内置函数,还是只是他们在文档中使用的实用函数?

最后,我没有收到任何错误。它工作正常,但我没有得到AppCheck 调试令牌

祝你今天过得愉快!