Firebase PHP存API请求到Realtime Database时如何做身份验证?
Firebase PHP API 身份校验实现方案
前置要求
用户端需先通过Firebase客户端SDK完成账号登录,获取到当前登录用户的ID Token,后续所有API请求都需要携带该Token。
PHP服务端校验流程
- 第一步:安装官方推荐的Firebase PHP Admin SDK
执行composer命令:composer require kreait/firebase-php - 第二步:初始化Firebase Auth实例
代码示例:<?php require __DIR__.'/vendor/autoload.php'; use Kreait\Firebase\Factory; use Kreait\Firebase\Exception\Auth\FailedToVerifyToken; // 替换为你的服务账号密钥文件路径 $factory = (new Factory) ->withServiceAccount('/path/to/firebase-service-account.json'); $auth = $factory->createAuth(); ?> - 第三步:提取请求携带的ID Token
要求客户端将ID Token放在Authorization请求头中,格式为Bearer <用户IDToken>,PHP侧提取逻辑:$idToken = str_replace('Bearer ', '', $_SERVER['HTTP_AUTHORIZATION'] ?? ''); if (empty($idToken)) { http_response_code(401); echo json_encode(['error' => '缺少身份凭证']); exit; } - 第四步:校验ID Token有效性
代码示例:try { $verifiedIdToken = $auth->verifyIdToken($idToken); } catch (FailedToVerifyToken $e) { http_response_code(401); echo json_encode(['error' => '身份凭证无效或已过期']); exit; } // 校验通过,获取用户唯一标识UID $uid = $verifiedIdToken->claims()->get('sub'); // 后续可将UID和请求信息关联写入Realtime Database,也可基于UID做权限控制
注意事项
- 禁止直接使用客户端传递的明文UID作为身份判断依据,必须通过ID Token校验拿到的UID才可信,避免伪造请求
- ID Token默认有效期为1小时,客户端需在Token过期前调用Firebase客户端的刷新接口获取新的有效Token
- 可同步配置Realtime Database规则做双重防护,示例规则如下,限制用户仅能读写自己UID对应节点下的数据:
{ "rules": { "request_records": { "$uid": { ".read": "auth.uid === $uid", ".write": "auth.uid === $uid" } } } }
内容的提问来源于stack exchange,提问作者ercan
相关产品推荐
相关产品推荐

