使用PHP进行身份验证的Firebase REST访问

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了使用PHP进行身份验证的Firebase REST访问脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用 PHP,Google Auth library以及Firebase的REST的 wrapper服务器访问Firebase …这很有助于实现这一点

use Firebase\JWT\JWT;
use GOOGLE\Auth\Credentials\ServiceAccountCredentials;
use Google\Auth\HttpHandler\HttpHandlerFactory;
use GuzzleHttp\Client;

$email = 'account@email.COM';
$key = 'PRivate_key_goes_here';

$scoPEs = [
    'https://www.googleapis.com/auth/userinfo.email','https://www.googleapis.com/auth/firebase.database',];

$creds = [
    'client_email' => $email,'private_key' => $key,];

$serviceAccount = new ServiceAccountCredentials($scopes,$creds);
$handler = HttpHandlerFactory::build(new Client());
$token = $serviceAccount->fetchAuthToken($handler);

$firebase = new \Firebase\FirebaseLib($url,$token);
$value = $firebase->get('test/hello');
# $value Now Stores "world"

但是,这需要Firebase中的安全规则是通用读/写,这是我不想要的.如果我将安全规则更新为:

{
  "rules": {
    "test": {
      ".read": "auth != null"
    }
  }
}

$value的结果变为{“error”:“Permission denied”}.我进行了广泛的搜索,并尝试了许多排列和可能的解决方案,没有确定的结果.

我已经使用this code向最终客户端提供JWT令牌,这些客户端可以成功使用它们并且可以毫无问题地利用安全规则.我最初为服务器尝试了相同的方法,但没有成功.我选择尝试将两种方法结合起来:

# Snipping code that didn't change...
$serviceAccount = new ServiceAccountCredentials($scopes,$creds);
$handler = HttpHandlerFactory::build(new Client());

$payload = [
    'iss' => $email,'sub' => $email,'aud' => 'https://identITytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit','iat' => time(),'exp' => time() + 60 * 60,'uid' => '123','claims' => [
        'uid' => '123',],];

$payload = $serviceAccount->updateMetadata($payload);
$token = JWT::encode($payload,$key,'RS256');

$firebase = new \Firebase\FirebaseLib($url,$token);
$value = $firebase->get('test/hello');

这似乎接近了,但$value现在包含{“error”:“在auth标题中缺少声明’孩子’.”}.为了解决这个问题,我修改了编码调用

$token = JWT::encode($payload,'RS256','key_id_goes_here');

这导致了一个稍微不同的错误:在auth标题中无效声明’kid’,表明我在正确的轨道上…但不完全在那里.直接使用JWT令牌会产生完全相同的结果.我有什么想法我做错了吗?邮件,私钥和密钥ID都直接来自我创建服务帐户时提供的json凭证文件.

我查看了几十页的文档和帖子,以下是最有帮助的:

> Using JWT for Server Auth (Firebase Docs)
> Using Custom Tokens to make REST requests to FB DB as an admin
> Is it still possible to do server side verification of tokens in Firebase 3?

Cross发布到Firebase Google Group.

@H_777_37@解决方法
使用将成为安全规则中的auth变量的服务帐户进行身份验证时,可以指定auth_VARiable_override查询参数.它应该一个正确转义的JSON对象.例如要做{“uid”:123}你要添加

?auth_variable_override=%7B%22uid%22%3A%22123%22%7D

到请求URL的末尾.

脚本宝典总结

以上是脚本宝典为你收集整理的使用PHP进行身份验证的Firebase REST访问全部内容,希望文章能够帮你解决使用PHP进行身份验证的Firebase REST访问所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。