2012-02-28 45 views
5

Bối cảnh nghiên cứu:an toàn client-side couchApp/CouchDB xác thực người dùng

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 - đặc biệt "Ari Najarian" 's bài viết

Câu hỏi:

Để diễn giải câu hỏi SO tôi đã đăng ở trên:

"Về cơ bản tôi muốn có một mẫu đăng ký để đăng ký tài khoản trong couchdb cho một couchapp. Điều này sẽ đòi hỏi phải tạo ra một người dùng mới trong cơ sở dữ liệu couchdb _users, và tạo ra một cơ sở dữ liệu mới, với người dùng mới được gán vai trò của quản trị cơ sở dữ liệu. Tất cả những gì yêu cầu thông tin đăng nhập quản trị viên máy chủ. "

Câu trả lời cho câu hỏi trước có liên quan đến máy chủ riêng biệt được đăng nhập vào couchdb làm quản trị viên để theo dõi couchdb và sửa đổi couchdb như mong muốn để đáp ứng một số sự kiện dữ liệu đến từ khách hàng

Câu hỏi của tôi là - đó có phải là cách duy nhất không? Điều đó không đánh bại toàn bộ mục đích của ngăn xếp web 2 tầng của couchdb? Có cách nào để sửa đổi cơ sở dữ liệu couchdb từ bên trong chức năng xác thực kiểm tra "loại == người dùng "tài liệu trong khi" nội bộ "/ đăng nhập riêng lẻ với tư cách là quản trị viên có thể?

Tôi xin lỗi nếu có một số cách đơn giản để thực hiện việc này và tôi đã không làm như vậy ' t tìm tài liệu phù hợp.

tắm Vấn đề rõ:

  1. Có trường hợp couchdb ngồi tại một địa chỉ internet.
  2. Cơ sở dữ liệu ghế dài này phục vụ cho khách hàng ngẫu nhiên một trang html và tập lệnh javascript được nhúng có chứa biểu mẫu đăng nhập/đăng nhập.
  3. Khách hàng nhập thông tin đăng ký (tên, mật khẩu) và gửi
  4. Tập lệnh JS sử dụng đối tượng XMLHttpRequest để mở kết nối với cá thể couchdb và gửi ... PROBLEM!

Vấn đề # 1 - Nếu thông tin đăng nhập được lưu trữ trong mã (được gửi dưới dạng xác minh cho cơ sở dữ liệu người dùng mới), thì mọi người có thể "xem nguồn html" và tiếp quản cơ sở dữ liệu.

-HOẶC-

Vấn đề # 2 - Nếu thông tin không được cung cấp và yêu cầu được gửi nặc danh, sau đó một người dùng mới sẽ được tạo ra trong cơ sở dữ liệu _users và một tin nhắn trả lời thành công sẽ được gửi đi. Nhưng không có cơ sở dữ liệu mới nào được tạo cho người dùng (và không thể không có thông tin đăng nhập quản trị viên) mà người dùng có thể tương tác với các mục đích cụ thể cho ứng dụng (ví dụ: thêm/xóa dữ liệu). Và - từ liên kết blog trên couchbase - nếu bạn đã bảo vệ cơ sở dữ liệu của mình với các vai trò/tên đối với người đọc ẩn danh và chức năng xác thực để ngăn chặn ghi danh ẩn danh, thì tài khoản người dùng ẩn danh (ví dụ: khách hàng muốn đăng ký không gian cơ sở dữ liệu để sử dụng ứng dụng) không thể làm bất cứ điều gì bởi vì một người dùng ẩn danh không thể, vì lý do bảo mật rõ ràng, chỉ định bất kỳ vai trò nào họ muốn có.Điều đó có nghĩa là cách duy nhất để có người dùng có chức năng là tạo tài khoản người dùng + cơ sở dữ liệu liên quan với tư cách quản trị viên trước và sau đó đưa ra các thông tin đăng nhập của người dùng - như hệ thống mời riêng tư, vâng?

Để nhắc lại, có cách nào không, chỉ sử dụng couchdb và một số kết hợp các trình xử lý xác thực của couchdb, các chức năng tài liệu thiết kế, ajax phía máy khách, v.v ... cho khách hàng kết nối để đăng ký và nhận cơ sở dữ liệu cá nhân (và CHỈ cơ sở dữ liệu đó rõ ràng) họ có quyền truy cập và có thể tương tác với?

+0

bản sao có thể có của [Đăng ký người dùng trong Couchapp/CouchDB thông qua jquery.couch.js hoặc Nếu không] (http://stackoverflow.com/questions/5305543/user-signup-in-couchapp-couchdb-through-jquery-couch -js-hoặc-else) –

+0

Tôi có câu hỏi được liệt kê trong phần "nghiên cứu nền" của tôi trong câu hỏi của tôi (và vì vậy, 2 câu hỏi được liên kết ngay bây giờ). Tôi tạo ra bài đăng này vì các giải pháp gợi ý về câu hỏi khác liên quan đến việc thêm một lớp mini khác vào tầng couchdb và tôi muốn biết liệu có một giải pháp couchdb "thuần túy" cho vấn đề hay không. Tôi đã đăng lên liên kết trên nhưng tôi không muốn chiếm đoạt câu hỏi của người khác. – jigritsn

+0

Câu hỏi này chắc chắn có liên quan. Tôi muốn có một giải pháp duy nhất và an toàn, couchdb chỉ – gregm

Trả lời

3

This không phải là một giải pháp ghế PURE, nhưng đó là chiếc ghế dài + nút, và giải quyết vấn đề của bạn:

Hi Tôi đã không được xung quanh trong một thời gian và không nhận ra điều này đã được chỉnh sửa/link loại bỏ (cộng chính sách liên kết không phải là câu trả lời! xin lỗi ...). Tôi đã sử dụng couchdb trên một dự án rất giống với những gì bạn đang cố gắng làm, và tiếc là không có cách nào để thực hiện những gì bạn muốn thực hiện mà không cần tacking trên dịch vụ khác để xử lý quyền truy cập cấp quản trị và tạo cơ sở dữ liệu người dùng. Syncpoint-API có thể được sử dụng để tạo thuận lợi cho điều này, nhưng nó thực sự là một dịch vụ nodejs xử lý đăng ký/đăng nhập và thiết lập cơ sở dữ liệu chuyên dụng.

Cho đến nay, Syncpoint đã chứng minh là không đáng tin cậy 100% và nó dường như là một dự án bị bỏ rơi, do CouchBase hút tất cả các tài nguyên r + d ra khỏi CouchDB dev.

Tôi hiện đang chuyển sang nodejs + socket.io dưới dạng lớp vận chuyển, sử dụng nút để bắt tay và chỉ định DB, sau đó xem thêm ghế dài thay đổi api trên máy chủ (thông qua một quy trình nút khác) thay đổi thông qua socket.io cho khách hàng. Ngoài ra tôi có một số couchapps "tinh khiết" chạy mà phục vụ dữ liệu công cộng trộn lẫn với các dữ liệu cá nhân.

Kết luận của tôi? CouchDB là một sản phẩm tuyệt vời và có một số tính năng tuyệt vời, nhưng đối với các lược đồ đăng nhập/ủy quyền phức tạp hơn và các nhu cầu ứng dụng chung khác được yêu cầu trong dev thực tế, nó chưa sẵn sàng.

+0

Xin chào người dùng mới và cảm ơn câu trả lời. Vui lòng đăng ít nhất một mô tả về giải pháp; liên kết một mình không phải là câu trả lời theo hướng dẫn (và chúng có thể bị xóa). –

+0

@kfancy - không phải lo lắng về bản cập nhật bị trì hoãn, tôi cũng chưa kiểm tra câu hỏi này trong vài tháng. Giải pháp của bạn để sử dụng một mini-tier dựa trên nút làm trung gian hòa giải giữa nguồn cấp dữ liệu _changes của couchdb và các yêu cầu của khách hàng là một câu hỏi Stack Overflow khác cũng được đề xuất. Tôi sẽ tiếp tục và chọn câu trả lời của bạn là "giải pháp" nếu chỉ vì dường như không có bất kỳ dấu hiệu nào cho thấy giải pháp thực sự - như trong bản cập nhật couchdb - sẽ xuất hiện. Cảm ơn bạn đã chia sẻ kinh nghiệm của mình trong việc giải quyết vấn đề này. – jigritsn

+0

Không tìm thấy repo Syncpoint-API trên github .. – alecxe

Các vấn đề liên quan