У меня есть приложение Firebase, которое является базовым сайтом для блогов. У меня не будет никакой аутентификации для обычных пользователей. Но мне нужен способ аутентификации и / или авторизации admin
для создания сообщений в блоге.
Сейчас у меня все настроено в одном проекте Firebase, и я планирую иметь защищенный маршрут "hidden
", например www.myFirebaseProject.com/admin-xyz
. PS: я знаю, что это не полностью скрыто, но я имею в виду, что это не доступно через клики.
Когда admin
попадет на этот URL, они предоставят username
и password
, и им будет предоставлено разрешение на доступ к админ-панелям и создание сообщений для блога.
У меня, вероятно, не будет страницы и / или формы для создания учетной записи , поскольку я могу и буду вручную создавать и регистрировать пользователей с правами администратора прямо из консоли Firebase.
Моя главная проблема в том, чтобы любой злоумышленник мог получить доступ к моему проекту Firebase и создать новые учетные записи, используя firebase.auth().createUserWithEmailAndPassword();
, я прав?
Из того, что я до сих пор думал, у меня есть два варианта сделать это, сохраняя при этом:
ВАРИАНТ 1:
Создайте двух пользователей и вручную установите флаг admin
в документах их пользователей в моей базе данных (Firestore). Коллекция user
и ее документы, очевидно, будут защищены от любых писем с этого момента.
Используйте этот флаг из Firestore для авторизации пользователей в разделе администратора.
ВАРИАНТ 2:
Firebase Admin SDK поддерживает определение пользовательских атрибутов для учетных записей пользователей. Это обеспечивает возможность реализации различных стратегий управления доступом, в том числе контроля доступа на основе ролей, в приложениях Firebase. Эти пользовательские атрибуты могут предоставлять пользователям разные уровни доступа (роли), которые применяются в правилах безопасности приложения.
Роли пользователя могут быть определены для следующих распространенных случаев:
- Предоставление пользователю административных прав доступа к данным и ресурсам.
- Определение различных групп, к которым принадлежит пользователь.
- Предоставление многоуровневого доступа:
- Различение платных / неоплачиваемых абонентов.
- Отличение модераторов от обычных пользователей.
- Заявление учителя / ученика и т. Д.
- Добавить дополнительный идентификатор пользователя. Например, пользователь Firebase может сопоставить другой UID в другой системе.
ВОПРОС 1:
- Я прав, что любой злоумышленник может создать новые учетные записи, просто проверив приведенную ниже информацию о Firebase?
var firebaseConfig = {
apiKey: "api-key",
authDomain: "project-id.firebaseapp.com",
databaseURL: "https://project-id.firebaseio.com",
projectId: "project-id",
storageBucket: "project-id.appspot.com",
messagingSenderId: "sender-id",
appID: "app-id",
};
ВОПРОС 2:
- Какой из перечисленных выше вариантов будет наилучшей практикой в этом случае? Могу ли я получить желаемое поведение от них обоих, или одно действительно лучше другого?