Аутентификация на стороне сервера Firebase с запросом HTTP POST с использованием секрета firebase
согласно документации firebase, Firebase принимает все типы API REST для аутентификации.
REST API-аутентификация Firebase Другими словами, запросы 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 для аутентификации сервера. Мое правило безопасности:
{
"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 отправляются в учетные данные.
2 ответов
URL не может анализировать json. Это просто строка текста. Просто включите токен напрямую.
curl -X https://INSTANCE.firebaseio.com/users/jack.json?auth=zXRLa7lybhJ21ZYqpXuqkT6YAYyySAGJ10lXInKy // not { auth: '...' }
при использовании секрета firebase в URL-адресе правила безопасности не применяются. Секрет позволяет вам полный доступ для чтения / записи без учета правил безопасности или проверки. Таким образом, нет необходимости читать что-либо в ваших правилах безопасности.
при работе с токенами вы не ссылаетесь на сам токен безопасности. Это зашифрованный объект json и содержание что имеется в правилах безопасности.
чтобы понять, что здесь происходит, вам понадобится рудиментарное понимание токенов. Как минимум, это требует чтения безопасность quickstart сверху вниз, и раздел о переменной auth сверху вниз.
в разделе auth variable вы найдете этот пример:
var token = tokenGenerator.createToken({"app_user_id": 1234, "isModerator": true });
обратите внимание, что содержимое токена are app_user_id
и isModerator
. Теперь вы можете ссылаться на эти две переменные в правилах безопасности:
".read": "auth.isModerator === true"
вы также можете улучшить понимание токенов с помощью возиться с ними здесь; позволяет создавать и разбивать маркеры, чтобы увидеть, что находится внутри них, а также проверять их против вашего пространства имен, чтобы убедиться, что они функционируют.
ваши правила просто должны иметь набор write в false, например:
{
"rules": {
".read": true,
".write": false
}
}
в "?auth=yourFireBaseSecret " в вашем запросе curl позволит вашему вызову REST пройти независимо от правил. Любые другие запросы должны будут уважать его и не смогут записывать ваши данные.