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数据的格式和语法.
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_id
和isModerator
.您现在可以在安全规则中引用这两个变量:
".read": "auth.isModerator === true"
Run Code Online (Sandbox Code Playgroud)
你也可以通过在这里摆弄它们来更好地理解代币; 允许您创建和分解令牌以查看其中的内容,并根据您的命名空间验证它们以确保它们正常运行.