2012-02-28 26 views
5

investigación Antecedentes:del lado del cliente Secure autenticación de usuario couchApp/couchdb

User Signup in Couchapp/CouchDB through jquery.couch.js or Otherwise

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 - específicamente "Ari Najarian" 's mensajes

Pregunta:

Para parafrasear la pregunta SO que publiqué anteriormente:

"Básicamente, quiero tener un formulario de registro para registrar una cuenta en couchdb para una couchapp. Esto implicaría la creación de un nuevo usuario en la base de datos de usuarios de couchdb, y la creación de una nueva base de datos, con el nuevo usuario asignado el rol de administrador de la base de datos. Todo lo que requiere credenciales de administración del servidor. "

La respuesta a la pregunta anterior involucraba el uso de un servidor externo separado que estaba conectado a couchdb como administrador para supervisar couchdb y modificar couchdb como se desee en respuesta a ciertos eventos de datos provenientes de un cliente .0 Mi pregunta es, ¿es esa la única forma? ¿No derrota todo el propósito de la pila web de 2 niveles de couchdb? ¿Hay alguna manera de modificar una base de datos de couchdb dentro de una función de validación que comprueba "tipo"? == usuario "documento mientras" internamente "/ por separado inició sesión como administrador quizás?

Me disculpo si hay alguna forma directa de hacerlo y no lo hice. t encuentra la documentación correcta.

extra Aclaración Problema:

  1. No es la instancia couchdb sentado en una dirección de Internet.
  2. Esta base de datos de sofá sirve a un cliente aleatorio una página html y un script javascript incrustado que contiene un formulario de registro/inicio de sesión.
  3. El cliente ingresa información de registro (nombre, contraseña) y envía
  4. La secuencia de comandos JS utiliza el objeto XMLHttpRequest para abrir una conexión a la instancia de couchdb y envía ... ¡PROBLEMA!

Problema n. ° 1: si las credenciales están almacenadas en el código (para enviarlas como verificación para la nueva base de datos), cualquiera podría "ver la fuente html" y hacerse cargo de la base de datos.

-O-

Problema # 2 - Si las credenciales no son suministrados y la petición se envía de forma anónima, a continuación, un nuevo usuario será creado en la base de datos _users y un mensaje de respuesta de éxito será enviado. Pero no se creó ninguna nueva base de datos para el usuario (y no puede carecer de credenciales de administrador) con las que el usuario puede interactuar para fines específicos de la aplicación (por ejemplo, agregar/eliminar datos). Y, desde el enlace del blog couchbase anterior, si ha asegurado su base de datos con roles/nombres contra lectores anónimos y funciones de validación para evitar escrituras anónimas, entonces una cuenta de usuario anónima (por ejemplo, un cliente que desea registrar el espacio de la base de datos para usar aplicación) no puede hacer nada porque un usuario anónimo no puede, por obvias razones de seguridad, especificar los roles que desea tener.Lo que significa que la única forma de tener usuarios funcionales es crear cuentas de usuario + bases de datos asociadas como administrador de antemano y luego repartir estas credenciales de usuario, por lo que es como un sistema de invitación privado, ¿sí?

Para reiterar, ¿hay alguna manera, usando solo couchdb y una combinación de controladores de autenticación de couchdb, funciones de documentos de diseño, ajax del lado del cliente, etc. para que un cliente se registre y obtenga una base de datos personal (y SOLAMENTE esa base de datos obviamente) tienen acceso y pueden interactuar con?

+0

posible duplicado de [Registro de usuario en Couchapp/CouchDB a través de jquery.couch.js o de lo contrario] (http://stackoverflow.com/questions/5305543/user-signup-in-couchapp-couchdb-through-jquery-couch -js-or-otherwise) –

+0

Tengo esa pregunta en mi sección de "investigación de antecedentes" de mi pregunta (y las 2 preguntas están enlazadas ahora). Creé esta publicación porque las soluciones de sugerencia sobre la otra pregunta implican agregar otra minicapa al nivel de sofá y quiero saber si hay una solución "pura" de sofá para el problema. Me habría publicado en el enlace de arriba, pero no quería secuestrar la pregunta de otra persona. – jigritsn

+0

Esta pregunta es ciertamente relevante. Quiero tener una solución pura Y segura, solo de sofádb – gregm

Respuesta

3

This no es una solución sofá PURE, pero es sofá + nodo, y resuelve su problema:

Hola No han existido en un rato y no darse cuenta de esto fue editado/eliminado enlace (más política de enlaces no siendo respuestas! lo siento ...). He estado usando couchdb en un proyecto muy similar a lo que estás tratando de hacer, y desafortunadamente no hay forma de hacer lo que quieres lograr sin utilizar otro servicio para manejar el acceso de nivel de administrador y la creación de la base de datos de usuarios. Syncpoint-API se puede usar para facilitar esto, pero en realidad es un servicio de nodejs que maneja el inicio de sesión/inicio de sesión y la configuración de la base de datos dedicada.

Hasta ahora, Syncpoint ha demostrado no ser 100% confiable y parece ser un proyecto abandonado, debido a que CouchBase absorbe todos los recursos de I + D del desarrollador de CouchDB.

Ahora me estoy moviendo a nodejs + socket.io como una capa de transporte, usando nodo a handshake y asigno un DB, y luego viendo el couch _changes api en el servidor (a través de otro proceso de nodo) para luego avanzar _cambia a través de socket.io al cliente. También tengo algunos couchapps "puros" en ejecución que sirven datos públicos mezclados con los datos privados.

¿Mi conclusión? CouchDB es un gran producto y tiene algunas características excelentes, pero para los esquemas de inicio de sesión/autorización más complejos y otras necesidades generales de aplicaciones requeridas en el desarrollo del mundo real, aún no está listo.

+0

Hola nuevo usuario y gracias por la respuesta. Por favor publique al menos una descripción de la solución; los enlaces por sí solos no son respuestas según las pautas (y pueden eliminarse). –

+0

@kfancy: no se preocupe por la actualización demorada, tampoco he verificado esta pregunta en meses. Su solución para usar un mini-nivel basado en nodos como mediador entre los feed _changes de couchdb y las solicitudes del cliente es lo que también sugirió otra pregunta sobre el desbordamiento de pila. Voy a seguir adelante y seleccionaré tu respuesta como la "solución", aunque solo sea porque no parece haber ninguna indicación de que se vaya a producir una solución verdadera, como en una actualización de couchdb. Gracias por compartir tu experiencia al lidiar con este problema. – jigritsn

+0

No hay repositorio de Syncpoint-API en github. – alecxe

Cuestiones relacionadas