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

如何使用Cloud Function判断Firebase App Check令牌是否有效?

实现App Check令牌有效性判断而非直接拒绝请求

要实现仅判断令牌有效性、记录信息后允许有限操作的需求,你需要关闭云函数的自动强制验证,转而手动验证App Check令牌,具体实现如下:

步骤说明

  1. 关闭自动强制验证:将runWith配置中的enforceAppCheck设为false,避免云函数直接拒绝无有效令牌的请求
  2. 手动验证令牌:在函数内部通过Firebase Admin SDK验证令牌合法性
  3. 记录验证状态:根据验证结果记录日志信息
  4. 分配有限操作权限:依据令牌有效性,为用户提供对应的功能权限

完整代码示例

const functions = require("firebase-functions/v1");
const admin = require("firebase-admin");
admin.initializeApp();

exports.yourV1CallableFunction = functions
  .runWith({
    enforceAppCheck: false, // 关闭自动拒绝逻辑,改为手动验证
  })
  .https.onCall(async (data, context) => {
    let isTokenValid = false;
    let appDetails = null;

    // 处理App Check令牌验证逻辑
    if (context.app?.token) {
      try {
        appDetails = await admin.appCheck().verifyToken(context.app.token);
        isTokenValid = true;
        functions.logger.info("App Check令牌验证通过", { appId: appDetails.appId });
      } catch (err) {
        functions.logger.warn("App Check令牌验证失败", { errorMsg: err.message });
      }
    } else {
      functions.logger.warn("请求未携带App Check令牌");
    }

    // 根据验证结果返回对应权限的操作结果
    if (isTokenValid) {
      return { status: "full_access", content: "已获取完整功能权限" };
    } else {
      return { status: "limited_access", content: "仅开放有限功能权限" };
    }
  });

关键细节

  • context.app?.token:从请求上下文提取App Check令牌,未携带令牌时该值为undefined
  • admin.appCheck().verifyToken():验证令牌合法性,成功返回包含应用ID的对象,失败则抛出错误
  • 日志记录:使用functions.logger记录验证状态,方便后续运维排查
  • 权限分支:通过isTokenValid区分有效/无效令牌的业务逻辑,实现有限操作控制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:07:05