2012-02-28 18 views
5

Badania Tło:Bezpieczne stronie klienta uwierzytelniania użytkownika 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 - specyficznie "Ari Najarian" „s posty

Pytanie:

Aby sparafrazować pytanie SO zamieszczone powyżej:

"Zasadniczo chcę mieć formularz rejestracyjny do rejestracji konta w couchdb dla couchapp. Wymagałoby to utworzenia nowego użytkownika w bazie danych couchdb _users oraz utworzenia nowej bazy danych, z nowym użytkownikiem przypisanym do roli administratora bazy danych. Wszystko to wymaga poświadczeń administratora serwera. "

Odpowiedź na poprzednie pytanie dotyczyła użycia zewnętrznego serwera, który był zalogowany do couchdb jako administrator w celu monitorowania couchdb i modyfikowania couchdb zgodnie z oczekiwaniami w odpowiedzi na określone zdarzenia danych pochodzące od klienta

Moje pytanie brzmi - czy to jedyny sposób? Czy to nie jest sprzeczne z celem 2-warstwowej aplikacji couchdb? Czy istnieje sposób modyfikacji bazy danych couchdb z poziomu funkcji sprawdzania poprawności, która sprawdza "typ == user "document while" wewnętrznie "/ osobno zalogowany jako administrator może?

Przepraszam, jeśli istnieje prosty sposób, aby to zrobić, a ja po prostu nie zrobiłem tego". t znaleźć odpowiednią dokumentację.

Extra Problem Wyjaśnienie:

  1. Istnieje couchdb instancja siedzi pod adresem internetowym.
  2. Baza danych kanapy służy do losowego klienta strony html i osadzonego skryptu javascript zawierającego formularz rejestracji/logowania.
  3. Klient wprowadza informacje o rejestracji (nazwa, hasło) i przesyła
  4. Skrypt JS używa obiektu XMLHttpRequest do otwarcia połączenia z instancją couchdb i wysyła ... PROBLEM!

Problem # 1 - Jeśli poświadczenia są przechowywane w kodzie (do wysłania jako weryfikacja dla nowej bazy danych użytkowników), każdy może "wyświetlić źródło html" i przejąć bazę danych.

LUB

Zadanie nr 2 - Jeśli poświadczenia nie są dostarczane, a wniosek wysyłany jest anonimowy, a następnie nowy użytkownik zostanie utworzony w bazie _users a komunikat odpowiedzi sukces zostanie wysłany. Ale dla użytkownika nie utworzono nowej bazy danych (i nie można jej pominąć przy uwierzytelnianiu administratora), z którą użytkownik może wchodzić w interakcję dla celów specyficznych dla aplikacji (np. Dodawanie/usuwanie danych). I - z powyższego łącza blogu - jeśli zabezpieczyłeś bazę danych rolami/nazwami przed anonimowymi czytnikami i funkcjami walidacji, aby zapobiec anonimowym zapisom, to anonimowe konto użytkownika (np. Klient, który chce zarejestrować obszar bazy danych, aby użyć app) nie może nic zrobić, ponieważ anonimowy użytkownik nie może, z oczywistych względów bezpieczeństwa, określić żadnych ról, które chcą mieć.Co oznacza, że ​​jedynym sposobem na to, aby użytkownicy funkcyjni mieli tworzyć konta użytkowników i powiązane bazy danych jako administrator, a następnie rozdawać te poświadczenia użytkownika - tak jak prywatny system zaproszeń, tak?

Powtórzmy, czy jest jakiś sposób, używając TYLKO couchdb i pewnej kombinacji procedur obsługi autentykacji couchdb, funkcji dokumentów projektowych, ajaxów po stronie klienta itd., Aby klient łączący się mógł zarejestrować i uzyskać osobistą bazę danych (i TYLKO tę bazę danych) oczywiście) mają dostęp i mogą wchodzić w interakcje?

+0

możliwy duplikat [Rejestracja użytkownika w Couchapp/CouchDB przez jquery.couch.js lub Inaczej] (http://stackoverflow.com/questions/5305543/user-signup-in-couchapp-couchdb-through-jquery-couch -js-or-inaczej) –

+0

Mam to pytanie wymienione w mojej sekcji "badania w tle" mojego pytania (a więc 2 pytania są teraz powiązane). Stworzyłem ten post, ponieważ rozwiązania sugestii w drugim pytaniu dotyczą dodania kolejnej mini-warstwy do poziomu couchdb i chcę wiedzieć, czy istnieje "czyste" rozwiązanie problemu couchdb. Chciałbym opublikować powyższy link, ale nie chciałem przejąć kontroli nad pytaniem innej osoby. – jigritsn

+0

To pytanie jest z pewnością istotne. Chcę mieć czyste i bezpieczne rozwiązanie tylko dla couchdb. – gregm

Odpowiedz

3

This nie jest czystym rozwiązaniem kanapa, ale kanapa + węzeł, i rozwiązuje problem:

Witam nie zostały okolice na jakiś czas i nie zrealizować ten został edytowany/link usunięty (plus polityka linków nie będących odpowiedziami! sorry ...). Używałem couchdb w projekcie bardzo podobnym do tego, co próbujesz zrobić, i niestety nie ma sposobu, aby zrobić to, co chcesz osiągnąć bez zakładania na inną usługę obsługi dostępu na poziomie administratora i tworzenia bazy danych użytkowników. Syncpoint-API można użyć w celu ułatwienia tego, ale w rzeczywistości jest to usługa nodejs obsługująca rejestrację/logowanie i dedykowaną konfigurację bazy danych.

Jak dotąd jednak okazało się, że Syncpoint nie jest w 100% niezawodny i wygląda na opuszczony projekt, ponieważ CouchBase wysysa wszystkie zasoby r + d z dala od deweloperów CouchDB.

Przechodzę teraz do nodejs + socket.io jako warstwa transportowa, używając węzła do uzgadniania i przydzielania DB, a następnie dalej oglądam kanapę _zmianę api na serwerze (poprzez kolejny proces węzłowy), aby następnie przesłać dalej _zmian przez socket.io do klienta. Mam też kilka "czystych" aplikacji couchapp, które obsługują publiczne dane zmieszane z prywatnymi danymi.

Mój wniosek? CouchDB to świetny produkt i ma kilka świetnych funkcji, ale dla bardziej skomplikowanych schematów logowania/autoryzacji i innych ogólnych potrzeb aplikacji wymaganych w świecie rzeczywistym dev, po prostu nie jest jeszcze gotowy.

+0

Witam nowego użytkownika i dziękuję za odpowiedź. Proszę zamieścić przynajmniej opis rozwiązania; same łącza nie są odpowiedziami zgodnie z wytycznymi (i mogą zostać usunięte). –

+0

@kfancy - nie martw się opóźnioną aktualizacją, nie sprawdzałem tego również w miesiącach. Twoje rozwiązanie polegające na korzystaniu z mini-warstwy opartej na węzłach jako mediatora między parametrami feedch i client dla couchdb jest tym, co sugerowało również inne pytanie Stack overflow. Mam zamiar wybrać odpowiedź jako "rozwiązanie", chociażby dlatego, że nie wydaje się, aby istniało jakiekolwiek wskazanie, że prawdziwe rozwiązanie - jak w aktualizacji couchdb - będzie dostępne. Dziękujemy za podzielenie się swoimi doświadczeniami w radzeniu sobie z tym problemem. – jigritsn

+0

Nie znaleziono repozytorium API Syncpoint na github .. – alecxe

Powiązane problemy