Безопасная клиентская аутентификация пользователя couchApp / couchDB - PullRequest
5 голосов
/ 29 февраля 2012

Фоновое исследование:

Регистрация пользователя в 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-authorisation-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» и получить базу данных.

1046 * -ИЛИ- *

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

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

1 Ответ

3 голосов
/ 28 сентября 2012

Это не является решением PURE для кушеток, но это кушетка + узел и решает вашу проблему:

Привет, я давно не был и не осознавал этогобыл отредактирован / ссылка удалена (плюс политика ссылок не отвечающих! извините ...).Я использовал couchdb в проекте, очень похожем на то, что вы пытаетесь сделать, и, к сожалению, нет способа сделать то, что вы хотите достичь, не используя другой сервис для обработки доступа на уровне администратора и создания пользовательской базы данных.Syncpoint-API может быть использован для облегчения этого, но на самом деле это сервис nodejs, обрабатывающий регистрацию / вход в систему и настройку выделенной базы данных.

Пока что Syncpoint оказался не 100% надежный, и кажется, что это заброшенный проект, потому что CouchBase высасывает все ресурсы r + d из CouchDB dev.

Сейчас я перехожу к nodejs + socket.io в качестве транспортного уровня, используяузел для рукопожатия и назначения БД, а затем дальнейшего наблюдения за API _chouch на сервере (через еще один процесс узла), чтобы затем перенаправить _changes через socket.io клиенту.Также у меня есть несколько «чистых» приложений couchapps, которые обслуживают общедоступные данные, смешанные с личными.

Мой вывод?CouchDB - отличный продукт, обладающий некоторыми замечательными функциями, но для более сложных схем входа в систему / авторизации и других общих потребностей приложений, требуемых в реальных разработках, он просто еще не готов.

...