Инициализировать приложение Admin Firebase для каждого вошедшего в систему пользователя

Я создаю веб-сайт в nodejs (expressjs), который будет использовать Firebase Admin Auth API для аутентификации пользователя с помощью id-token-verification.

Затем этот токен будет сохранен в сеансе сервера, чтобы использоваться для запросов к базе данных в реальном времени, которые будут выполняться с сервера.

Мой вопрос касается ограничения привилегий, в документах говорится, что databaseAuthVariableOverride следует использовать для имитации пользователя, использующего их uid

Взято из документов по авторизации администратора:

Если вы хотите, чтобы ваш сервер эмулировал действия пользователя, такие как доступ к базе данных реального времени Firebase от имени этого пользователя, вы должны сначала проверить и декодировать токен идентификатора для этого пользователя. Затем используйте опцию databaseAuthVariableOverride, чтобы ограничить привилегии вашего сервера.

поэтому для каждого пользователя:

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://databaseName.firebaseio.com",
  databaseAuthVariableOverride: {
    uid: userId1
  }
}, userId1)

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://databaseName.firebaseio.com",
  databaseAuthVariableOverride: {
    uid: userId2
  }
}, userId2)

Можно ли инициализировать новый firebaseApp для каждого пользователя, вошедшего в систему, или существует стандартный способ ограничения привилегий для нескольких пользователей?


person DBrowne    schedule 24.03.2017    source источник


Ответы (1)


Это не совсем то, для чего предназначен административный SDK. Вы, конечно, можете имитировать пользователя таким образом, но это не лучшая практика.

Предполагается, что пользователи могут читать и записывать свои собственные данные через клиент. Для них существуют правила безопасности, потому что вы не можете быть уверены, что они будут играть по нужным вам правилам.

На сервере, поскольку вы контролируете всю логику, вам не нужно имитировать конечных пользователей, потому что вы можете быть уверены, что ваш собственный код будет делать правильные вещи с любыми данными, которые он читает и записывает.

Свойство uid предназначено для реализации временного понижения привилегий до другого типа административной роли, которой вы управляете, а не для имитации ваших конечных пользователей. Этот uid обычно жестко запрограммирован в правилах безопасности, которые определяют уровень привилегий для этой роли или службы. Лучшее описание того, как это работает можно найти здесь< /а>. (Это была ссылка на слово «здесь» в части документов, которые вы цитировали.)

person Doug Stevenson    schedule 24.03.2017