Позвольте мне вначале сказать, что Firebase не предназначен для доступа от имени пользователя из бэкэнд-службы (по крайней мере, я так думаю).Клиентские SDK предназначены для использования в клиентском приложении, ориентированном на пользователя, а Server / Admin SDK предназначены для фоновых заданий и работ по обслуживанию (если облачных функций Firebase недостаточно).
Как я могу аутентифицировать пользователя по электронной почте и паролю из PHP, а затем получить токен, который в дальнейшем может быть использован javascript?
A "Войти по электронной почте и паролю"Функциональность в настоящее время (я собираюсь взад и вперёд в моей голове, если она должна ?) недоступна в неофициальном Firebase SDK для PHP , но вы можете сделать это с помощью пользовательского токена:
<?php
use Kreait\Firebase\Factory;
$email = '...';
$password = '...';
$serviceAccount = '/path/to/service-account.json';
$factory = (new Factory())->withServiceAccount($serviceAccount);
$auth = $factory->createAuth();
$userRecord = $auth->verifyPassword($email, $password);
$customToken = $auth->createCustomToken($userRecord->uid);
Затем вы можете передать пользовательский токен в ваше приложение JavaScript и использовать Auth.signInWithCustomToken()
с ним.
Как именно работает аутентификация Firebase до того, как яу вас достаточно прав для взаимодействия с такими инструментами, как Firestore?
На стороне сервера служебная учетная запись используется для аутентификации запросов к API-интерфейсам Firebase.Если вы создаете такие учетные данные учетной записи службы, как описано в официальной документации , вы можете использовать ее для инициализации вместе с ней SDK сервера и доступа к Firebase без каких-либо ограничений.Если вы затем выполняете действия от имени пользователя, вы должны убедиться, что пользователь ранее прошел аутентификацию с вашим пользовательским приложением.
В настоящее время соединение API «как пользователь» недоступно в SDK, так кака также поддержка Firestore, но я над этим работаю.
На стороне клиента Client SDK инициализируется с помощью ключа API (который не является секретом, его можно найти, например, в источнике HTML).код веб-приложения с поддержкой Firebase), но приложение вообще не может взаимодействовать с Firebase без какой-либо аутентификации, по крайней мере анонимная аутентификация .При анонимной проверке подлинности это делается с помощью правил безопасности различного типа (Хранилище, База данных в реальном времени, Firestore, ...), чтобы гарантировать, что анонимные пользователи не смогут связываться с другими данными, кроме их одних.
Почему логирование (с использованием простой электронной почты и пароля) при использовании javascript - это вообще вещь?Разве это не значит, что все могут видеть все учетные данные?
Я не уверен, что полностью понимаю этот вопрос, но вы правы - если секреты зарегистрированы, это проблема,но в любой среде.Если разработчик приложения помещает комбинацию электронной почты и пароля в журналы перед передачей учетных данных, например, Auth.signInWithEmailAndPassword()
, то каждый, кто может видеть журналы, сможет их перехватить.Если вы нашли такие лог-операторы в библиотеке, вы должны абсолютно уведомить разработчиков библиотеки, чтобы они могли это исправить.
Я почти уверен, что вы уже знали это и что вы имели в виду что-то еще, я простоЯ хотел бы выпустить его для полноты картины ^^.
Для библиотек javascript, которые взаимодействуют с сервером, вот так: как сервер (Firestore) может предотвратить модификацию данных от злодеев черезПриставка?После входа в систему они могут просто отправлять команды с консоли на сервер, потому что это всего лишь JavaScript.Правильно ли я?
После входа в систему в качестве пользователя приложения этот пользователь сможет получить доступ только к тем частям вашего приложения, которые для него включены, через определенные правила безопасности.В отношении правила безопасности, которое вы дали, вы правы: это слишком допустимо, и, пока кто-то проходит проверку подлинности, он может читать и писать, если он вообще проходит проверку подлинности (так что это только предотвратит доступ к вашему приложению без аутентификации.
Если вы хотите, чтобы пользователи могли видеть и изменять только свои собственные данные, вы можете использовать правило, подобное этому:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents/{userId} {
match /{document=**} {
allow read, update, delete: if request.auth.uid == userId;
allow create: if request.auth.uid != null;
}
}
}
Это был только пример, официальная документация по безопасности Firestore гораздо более полная, чем я мог бы быть ^^.
Пользователи приложения не могут ни войти в консоль Firebase вашего проектани с помощью инструментов Firebase CLI.