2014-03-05 3 views
8

В соответствии с документацией к firebase Firebase принимает все типы API REST для аутентификации.Протокол сервера Firebase с HTTP-запросом POST с использованием секретной базы Firebase

REST API - Firebase authentication Иными словами, все запросы 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 Secret для аутентификации сервера. Мое правило Безопасность:

{ 
    "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 отправляются в ПОЛНОМОЧИЯ.

+1

Вы действительно пытаетесь пройти аутентификацию против ' .fireabseio-demo.com'? Здесь вы получите результат, но на демонстрационных серверах нет правил аутентификации или безопасности. auth! == null должен работать для любого действительного токена. Как вы создали свою, или используете секрет этого пространства имен? – Kato

+0

Это не демо, нет. Я не использую токен, я хотел просто использовать «Firebase Secret». Я не против использования токена, но у меня создалось впечатление, что я могу использовать только секрет для аутентификации сервера, а не для идентификации отдельных пользователей. Что касается документации для аутентификации сервера REST API, все, что я мог найти, это то, что один пример строки «завиток» и т. Д., Который я показал в верхней части сообщения. Все, что он дает, это '? Auth = CREDENTIAL'. Вот и все. Что я ставлю вместо «ПОЛНОМОЧИЯ»? –

+1

Вы можете посмотреть в Forge в ключах безопасности, нажать на шоу и поместить это значение в том месте, где вы видите CREDENTIAL. – Kato

ответ

7

URL не может разобрать json. Это всего лишь строка текста. Просто включите токен напрямую.

curl -X https://INSTANCE.firebaseio.com/users/jack.json?auth=zXRLa7lybhJ21ZYqpXuqkT6YAYyySAGJ10lXInKy // not { auth: '...' } 

Когда вы используете секрет вашей firebase в URL-адресе, правила безопасности не применяются. Секрет позволяет вам получить полный доступ для чтения/записи без учета правил безопасности или проверки. Поэтому нет необходимости читать что-либо в ваших правилах безопасности.

При работе с токенами вы не ссылаетесь на сам маркер безопасности. Это зашифрованный json-объект, а содержимое - это то, что доступно в правилах безопасности.

Чтобы понять, что здесь происходит, вам понадобится рудиментарное понимание жетонов. На минимальном уровне для этого требуется прочитать security quickstart сверху вниз, а раздел о auth variable сверху вниз.

В переменного сечения AUTH, вы найдете этот пример:

var token = tokenGenerator.createToken({"app_user_id": 1234, "isModerator": true }); 

Обратите внимание, что содержимое маркера являются app_user_id и isModerator. Теперь вы можете обратиться к этим двум переменным в правилах безопасности:

".read": "auth.isModerator === true" 

Вы можете также развить лучшее понимание токенов fiddling with them here; позволяет создавать и разбивать токены, чтобы видеть, что внутри них, а также проверять их против вашего пространства имен, чтобы убедиться, что они функционируют.

1

Ваших правилам просто нужно иметь набор записи ложь, например, так:

{ 
    "rules": { 
     ".read": true, 
     ".write": false 
    } 
} 

«AUTH = yourFireBaseSecret?» В вашем завитка запроса позволит вашему REST вызова пройти независимо от правил. Любые другие запросы должны будут уважать его и не смогут записывать ваши данные.

Смежные вопросы