Безопасная аутентификация пользователя couchApp / couchDB на стороне клиента

Общие исследования:

Регистрация пользователей в Couchapp / CouchDB через jquery. couch.js или Иначе

http://blog.couchbase.com/what%E2%80%99s-new-couchdb-10-%E2%80%94-part-4-security%E2%80%99n -stuff-users-authentication-authorization-and-permissions

https://issues.apache.org/jira/browse/COUCHDB-1175 - в частности, сообщения «Ари Наджарян»

Вопрос:

​​Перефразируя вопрос SO, который я разместил выше:

«По сути, я хочу иметь форму подписки для регистрации учетной записи в couchdb для couchapp. Это повлечет за собой создание нового пользователя в базе данных couchdb _users и создание новой базы данных, с новым пользователем, назначенным роль администратора базы данных. Все, что требует учетных данных администратора сервера. "

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

Мой вопрос - это единственный способ? Разве это не уничтожает всю цель двухуровневого веб-стека couchdb? Есть ли способ изменить базу данных couchdb из функции проверки, которая проверяет наличие документа «type == user» при «внутреннем» / отдельном входе в систему как администратор, возможно?

Прошу прощения, если есть какой-то простой способ сделать это, и я просто не нашел нужной документации.

Дополнительное разъяснение проблемы:

  1. Экземпляр couchdb находится по интернет-адресу.
  2. Эта база данных кушеток обслуживает случайного клиента HTML-страницу и встроенный скрипт javascript, который содержит форму регистрации / входа.
  3. Клиент вводит регистрационную информацию (имя, пароль) и отправляет
  4. JS-скрипт использует объект XMLHttpRequest для открытия соединения с экземпляром couchdb и отправляет ... ПРОБЛЕМА!

Проблема №1 - Если учетные данные хранятся в коде (для отправки в качестве подтверждения для новой пользовательской базы данных), то любой может «просмотреть исходный HTML-код» и принять базу данных.

-ИЛИ-

Проблема № 2 - Если учетные данные не предоставлены и запрос отправлен анонимно, то в базе данных _users будет создан новый пользователь и будет отправлено сообщение об успешном ответе. Но для пользователя не было создано новой базы данных (и не может быть без учетных данных администратора), с которой пользователь может взаимодействовать для конкретных целей приложения (например, добавлять / удалять данные). И - из приведенной выше ссылки в блоге couchbase - если вы защитили свою базу данных с помощью ролей / имен от анонимных читателей и функций проверки для предотвращения анонимной записи, тогда учетная запись пользователя, созданная анонимно (например,клиент, который хочет зарегистрировать пространство базы данных для использования приложения) не может ничего делать, потому что анонимный пользователь не может по очевидным причинам безопасности указать те роли, которые он хочет иметь. Это означает, что единственный способ иметь -функциональных- пользователей - это заранее создать учетные записи пользователей + связанные базы данных в качестве администратора, а затем раздать эти учетные данные - так что, как в частной системе приглашения, да?

Повторюсь, есть ли какой-нибудь способ , используя ТОЛЬКО couchdb и некоторую комбинацию обработчиков аутентификации couchdb, функций проектного документа, клиентского ajax и т. д. для подключающегося клиента, чтобы зарегистрировать и получить личную базу данных (и ТОЛЬКО эту базу данных, очевидно), к которой он имеет доступ и с которой может взаимодействовать?

5
задан Community 23 May 2017 в 12:29
поделиться