Аутентификация на стороне сервера 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 пройти независимо от правил. Любые другие запросы должны будут уважать его и не смогут записывать ваши данные.