使用PHP进行身份验证的Firebase REST访问
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用PHP进行身份验证的Firebase REST访问,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2676字,纯文字阅读大概需要4分钟。
内容图文
![使用PHP进行身份验证的Firebase REST访问](/upload/InfoBanner/zyjiaocheng/788/4907655281be42f782b8f09991f516ef.jpg)
我正在尝试使用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, $key, '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.
解决方法:
使用将成为安全规则中的auth变量的服务帐户进行身份验证时,可以指定auth_variable_override查询参数.它应该是一个正确转义的JSON对象.例如要做{“uid”:123}你要添加:
?auth_variable_override=%7B%22uid%22%3A%22123%22%7D
到请求URL的末尾.
内容总结
以上是互联网集市为您收集整理的使用PHP进行身份验证的Firebase REST访问全部内容,希望文章能够帮你解决使用PHP进行身份验证的Firebase REST访问所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。