Firebase服务器端使用firebase密钥使用HTTP POST请求进行身份验证

时间:2014-03-05 04:05:07

标签: authentication firebase

根据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中发送的格式和语法。

2 个答案:

答案 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_idisModerator。您现在可以在安全规则中引用这两个变量:

".read": "auth.isModerator === true"

您还可以通过fiddling with them here更好地了解令牌;允许您创建和分解令牌以查看其中的内容,并根据您的命名空间验证它们以确保它们正常运行。

答案 1 :(得分:1)

您的规则只需要将write设置为false,如下所示:

{
    "rules": {
        ".read": true,
        ".write": false
    }
}

curl请求中的“?auth = yourFireBaseSecret”将允许您的REST调用通过,无论规则如何。任何其他请求都需要尊重它,并且无法写入您的数据。