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

如何通过Rest API使用Firebase Auth Admin SDK?PHP多租户场景咨询

解决PHP后端调用Firebase Admin REST API的方案

嘿,我之前做SaaS项目时也碰到过几乎一模一样的困境,结合你的场景(GCP部署、服务账号全权限、自定义认证流程),给你几个实用的落地思路:

1. 优先升级kreait/firebase-php到最新版本

你提到维护者已经在GitHub Issue后补全了缺失的端点,这绝对是最省心的方案。直接执行更新命令:

composer update kreait/firebase-php

升级完成后,就能直接调用之前缺失的Admin功能了,比如:

$auth = $firebase->getAuth();
// 撤销用户的所有刷新令牌
$auth->revokeRefreshTokens($uid);
// 禁用指定用户
$auth->disableUser($uid);

这种方式不用自己处理复杂的认证逻辑,直接复用成熟的SDK即可,能省不少事。

2. 用Google官方PHP客户端调用Firebase Admin REST API

如果SDK还是有覆盖不到的边缘场景,或者你更倾向于直接调用原生API,可以利用GCP服务账号的OAuth2凭证访问Firebase的Admin级API(这类API不对普通客户端开放,必须通过服务账号授权):

步骤1:获取服务账号的访问令牌

先安装Google官方的PHP客户端库:

composer require google/apiclient

然后编写代码生成访问令牌:

require __DIR__ . '/vendor/autoload.php';

$client = new Google\Client();
// 加载你的Firebase服务账号JSON文件
$client->setAuthConfig('/path/to/your-service-account.json');
// 添加Firebase Admin权限范围
$client->addScope('https://www.googleapis.com/auth/firebase');
// 用服务账号断言获取访问令牌
$client->fetchAccessTokenWithAssertion();
$accessToken = $client->getAccessToken()['access_token'];

如果你的服务器部署在GCP Compute Engine上,还能不用存储服务账号文件,直接从元数据服务器安全获取令牌:

$ch = curl_init('http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token?scopes=https://www.googleapis.com/auth/firebase');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Metadata-Flavor: Google']);
$response = curl_exec($ch);
curl_close($ch);
$tokenData = json_decode($response, true);
$accessToken = $tokenData['access_token'];

步骤2:调用Firebase Admin REST端点

比如你需要撤销用户刷新令牌,对应的API端点是accounts:update,请求示例:

$firebaseProjectId = 'your-firebase-project-id';
$uid = 'target-user-uid';

$url = "https://identitytoolkit.googleapis.com/v1/accounts:update";
$data = [
    'localId' => $uid,
    'revokeRefreshTokens' => true
];

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer {$accessToken}",
    "Content-Type: application/json",
    "X-Firebase-Project-Id: {$firebaseProjectId}"
]);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

// 处理响应结果
if ($httpCode === 200) {
    echo "刷新令牌已成功撤销";
} else {
    $error = json_decode($response, true);
    echo "操作失败:" . $error['error']['message'];
}

禁用用户、修改密码等其他Admin操作,都可以通过对应的Identity Toolkit API端点实现,参数可以参考Google Identity Platform的官方文档。

3. 封装自定义PHP工具类

如果需要频繁调用多个Admin API,可以自己封装一个轻量级的工具类,把令牌获取和API调用的逻辑封装起来,方便项目中复用。比如创建一个FirebaseAdminClient类,内置revokeRefreshToken、disableUser等方法,内部统一处理认证和请求逻辑。

总结

  • 优先用升级后的kreait/firebase-php,开发成本最低
  • 自定义REST调用适合SDK覆盖不到的场景,依托GCP服务账号权限可以安全访问所有Admin功能
  • GCP元数据服务器获取令牌的方式更安全,避免在服务器上存储敏感的服务账号文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:16:02