使用Firebase应用密钥验证服务器

Mow*_*zer 3 security authentication firebase

我想实现第1段中描述的服务器身份验证方法.

  1. 使用Firebase应用程序密钥:所有身份验证方法都可以接受Firebase应用程序密钥而不是JWT令牌.这将授予服务器对整个F​​irebase数据库的完全读写权限.除非通过App Dashboard撤消,否则此访问权限永不过期.

我需要指导如何做到这一点.我不想使用任何auth变量,因为我不会通过一些单一的静态密钥对用户进行身份验证,而是我的服务器.

那么我的安全规则是什么样的呢?

这是我到目前为止所拥有的.

安全rules.json
{
  "rules": {
    ".read": true,
    ".write": "secret == 'mykey'"
  }
}
Run Code Online (Sandbox Code Playgroud)

我将如何在服务器端HTTP请求中实现此功能?我会创建一个名为secretvalue 的标头,mykey如下所示:

server.js
{"secret": "mykey"}
Run Code Online (Sandbox Code Playgroud)

Fra*_*len 5

要在HTTP请求中使用机密,请在URL的auth参数中传递它.例如

curl 'https://yours.firebaseio.com/.json?auth=<your_secret>'
Run Code Online (Sandbox Code Playgroud)

当您使用您的密钥对Firebase进行身份验证时,生成的会话将以管理员身份运行.它具有对整个Firebase数据库的完全读/写访问权限,就像访问Firebase信息中心时一样.因此,您无需在安全规则中授予任何权限.

如果您希望能够检测服务器,则应使用自定义令牌而不是秘密.创建自定义标记时,您可以准确确定auth变量的内容.例如

{
  "uid": "myserver"
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以在安全规则中检查该特定的uid:

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

你可以使用这个jsfiddle制作自定义令牌:http://jsfiddle.net/firebase/XDXu5/