根据firebase文档,Firebase接受所有REST API类型进行身份验证。
REST API - Firebase authentication 换句话说,PUT / POST / GET请求都可以在HTTP请求中用于验证授权。这是示例代码:
curl \
https://SampleChat.firebaseIO-demo.com/users/jack/name.json?auth=CREDENTIAL
Firebase文档还指出:
参数可以是您的Firebase密钥或身份验证 令牌
我发送的POST请求配置如下:
var Credential = "{\"auth:\", \"zXRLa7lybhJ21ZYqpXuqkT6YAYyySAGJ10lXInKy\"}";
https://MyFirebaseName.firebaseio.com/.json?auth="+Credential
所以,我想使用POST请求,使用我的Firebase Secret进行服务器身份验证。我的安全规则是:
{
"rules": {
".read": true,
".write": "auth == 'zXRLa7lybhJ21ZYqpXuqkT6YAYyySAGJ10lXInKy'"
}
}
我收到firebase返回的错误消息:
无效参数: “https://MyFirebaseName.firebaseio.com/.json?auth=” zXRLa7lybhJ21ZYqpXuqkT6YAYyySAGJ10lXInKy“
似乎POST
请求实际上已通过Firebase,而Firebase正在读取数据。只是参数配置不正确。我已经尝试了所有我能想到的东西。我不确定应该如何配置CREDENTIALS
,我找不到任何关于它的信息。也许它应该是这样的:
{"auth": "The Secret Here"}
我刚尝试过,它不会接受它。
我也尝试过使用:
{
"rules": {
".read": true,
".write": "auth !== null"
}
}
希望无论我在REST API中发送的内容都会被接受,但是这不起作用。
我做错了什么?我已多次查看文档,在此处搜索,搜索了一个Google小组。我无法弄清楚。我需要知道POST数据如何在CREDENTIALS中发送的格式和语法。
答案 0 :(得分:9)
网址无法解析json。它只是一串文字。只需直接包含令牌即可。
curl -X https://INSTANCE.firebaseio.com/users/jack.json?auth=zXRLa7lybhJ21ZYqpXuqkT6YAYyySAGJ10lXInKy // not { auth: '...' }
在URL中使用firebase机密时,不会应用安全规则。秘密允许您完全读/写访问,而不考虑安全规则或验证。因此,无需在安全规则中阅读任何内容。
使用令牌时,您不会引用安全令牌本身。这是一个加密的json对象,内容是安全规则中可用的。
要了解这里发生的事情,您需要对令牌进行基本的了解。至少,这需要从上到下阅读security quickstart,从上到下阅读auth variable部分。
在auth变量部分中,您将找到以下示例:
var token = tokenGenerator.createToken({"app_user_id": 1234, "isModerator": true });
请注意,令牌的内容为app_user_id
和isModerator
。您现在可以在安全规则中引用这两个变量:
".read": "auth.isModerator === true"
您还可以通过fiddling with them here更好地了解令牌;允许您创建和分解令牌以查看其中的内容,并根据您的命名空间验证它们以确保它们正常运行。
答案 1 :(得分:1)
您的规则只需要将write设置为false,如下所示:
{
"rules": {
".read": true,
".write": false
}
}
curl请求中的“?auth = yourFireBaseSecret”将允许您的REST调用通过,无论规则如何。任何其他请求都需要尊重它,并且无法写入您的数据。