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

Ala*_*lls 9 authentication firebase

根据firebase文档,Firebase接受所有REST API类型进行身份验证.

REST API - Firebase身份验证 换句话说,PUT/POST/GET请求都可以在HTTP请求中用于验证授权.这是示例代码:

curl \
https://SampleChat.firebaseIO-demo.com/users/jack/name.json?auth=CREDENTIAL
Run Code Online (Sandbox Code Playgroud)

Firebase文档还指出:

参数可以是您的Firebase密钥或身份验证令牌

我发送的POST请求配置如下:

var Credential = "{\"auth:\", \"zXRLa7lybhJ21ZYqpXuqkT6YAYyySAGJ10lXInKy\"}";

https://MyFirebaseName.firebaseio.com/.json?auth="+Credential
Run Code Online (Sandbox Code Playgroud)

所以,我想使用POST请求,使用我的Firebase Secret进行服务器身份验证.我的安全规则是:

{
    "rules": {
        ".read": true,
        ".write": "auth == 'zXRLa7lybhJ21ZYqpXuqkT6YAYyySAGJ10lXInKy'"
    }
}
Run Code Online (Sandbox Code Playgroud)

我从firebase返回一个错误,指出:

参数无效:" https://MyFirebaseName.firebaseio.com/.json?auth= "zXRLa7lybhJ21ZYqpXuqkT6YAYyySAGJ10lXInKy"

似乎POST请求实际上是通过Firebase,而Firebase正在读取数据.只是参数配置不正确.我已经尝试了所有我能想到的东西.我不确定CREDENTIALS应该如何配置,我找不到任何关于它的信息.也许它应该是这样的:

{"auth": "The Secret Here"} 
Run Code Online (Sandbox Code Playgroud)

我只是尝试过,它不接受它.

我也尝试过使用:

{
    "rules": {
        ".read": true,
        ".write": "auth !== null"
    }
}
Run Code Online (Sandbox Code Playgroud)

希望无论我在REST API中发送的内容都会被接受,但这样做不起作用.

我究竟做错了什么?我已多次查看文档,在此处搜索,搜索了一个Google小组.我无法弄清楚.我需要知道在CREDENTIALS中如何发送POST数据的格式和语法.

Kat*_*ato 9

URL无法解析json.它只是一串文字.只需直接包含令牌即可.

curl -X https://INSTANCE.firebaseio.com/users/jack.json?auth=zXRLa7lybhJ21ZYqpXuqkT6YAYyySAGJ10lXInKy  // not { auth: '...' }
Run Code Online (Sandbox Code Playgroud)

在URL中使用firebase机密时,不会应用安全规则.秘密允许您完全读/写访问,而不考虑安全规则或验证.因此,无需在安全规则中阅读任何内容.

使用令牌时,您不会引用安全令牌本身.这是一个加密的json对象,其内容是安全规则中可用的内容.

要了解这里发生的事情,您需要对令牌进行基本的了解.至少,这需要从上到下阅读安全性快速入门,以及从上到下阅读有关auth变量的部分.

在auth变量部分中,您将找到以下示例:

var token = tokenGenerator.createToken({"app_user_id": 1234, "isModerator": true });
Run Code Online (Sandbox Code Playgroud)

请注意,令牌的内容是app_user_idisModerator.您现在可以在安全规则中引用这两个变量:

".read": "auth.isModerator === true"
Run Code Online (Sandbox Code Playgroud)

你也可以通过在这里摆弄它们来更好地理解代币; 允许您创建和分解令牌以查看其中的内容,并根据您的命名空间验证它们以确保它们正常运行.