2013-08-04 33 views
18

Przygotowuję CouchDB na Cloudant i jestem zdezorientowany, ponieważ Cloudant wydaje się robić auth inaczej niż zwykły CouchDB. W szczególności, Cloudant wydaje się brakować bazy danych _users.Autoryzacja chmur: brak bazy danych użytkownika

czytam Cloudant auth nas here, i to pod warunkiem następujące instrukcje:

Can I use CouchDB security features (_users database, security objects, validation functions) on Cloudant?

Yes you can. If you want to use the _users database you must first turn off Cloudant's own security for the roles you want to manage via _users. To do this you need to PUT a JSON document like the following to the _security endpoint of the database (for example https://USERNAME.cloudant.com/DATABASE/_security):

{ "cloudant": { "nobody": ["_reader", "_writer", "_admin"] }, "readers": { "names":["demo"],"roles":[] } }

Te instrukcje pracował w porządku, i pozwolił mi zaktualizować obiekt _security bazy danych.

Nie było jasne, jak skonfigurować bazę danych użytkowników. Nie istnieją automatycznie, więc próbowałem go tworzyć przy użyciu zwykłego:

curl -X PUT $COUCH/_users

To działało w porządku, ale gdy próbuję dodać nowego użytkownika do _users następująco:

curl -HContent-Type:application/json \ 
    -vXPUT $COUCH/_users/org.couchdb.user:me \ 
    --data-binary '{"_id": "org.couchdb.user:me","name": "me","roles": [],"type": "user","password": "pwd"}' 

wydaje się, aby utworzyć dokument poprawnie:

{"ok":true,"id":"org.couchdb.user:me","rev":"3-86c3801fdb8c32331f5f2580e861a765"}

ale nowego użytkownika w _users na Cloudant brakuje zaszyfrowaną hasło:

{ 
    "_id": "org.couchdb.user:me", 
    "_rev": "3-86c3801fdb8c32331f5f2580e861a765", 
    "name": "me", 
    "roles": [ 
    ], 
    "type": "user", 
    "password": "pwd" 
} 

Więc kiedy próbują uwierzytelnić na tego użytkownika, pojawia się następujący błąd:

{"error":"bad_request","reason":"missing password_sha property in user doc"}

na mojej instalacji lokalnej couchdb, tworzenie nowego użytkownika w _users automatycznie utworzyć zaszyfrowany hasło:

{ 
    "_id": "org.couchdb.user:test", 
    "_rev": "1-9c1c4360eba168468a37d7f623782d23", 
    "password_scheme": "pbkdf2", 
    "iterations": 10, 
    "name": "test", 
    "roles": [ 
    ], 
    "type": "user", 
    "derived_key": "4a122a20c1a8fdddb5307c29078e2c4269abffa5", 
    "salt": "36c0c05cf2a3ee321eabd10c46a8aa2a" 
} 

Próbowałem kopiowanie "_design/_auth" dokument z mojej instalacji lokalnej couchdb do Cloudant, b ut wyniki są takie same - nie ma haszowanego hasła.

Wygląda na to, że w pewnym momencie zjechałem z torów, ale nie jestem pewien, gdzie to się stało. Jak mogę skonfigurować Cloudant tak, aby korzystał z tego samego rodzaju uwierzytelniania co zwykły CouchDB?

Odpowiedz

12

Znalazłem odpowiedź poprzez #cloudant IRC:

09:59 <+kocolosk> creating _users was the right thing to do

09:59 <+kocolosk> the API matches an older version of CouchDB where the passwords needed to hashed client-side

10:00 < jbeard> oh, I see

10:00 <+kocolosk> we're addressing that lack of support for automatic hashing

10:01 < jbeard> I'm trying to find documentation on client-side hashing in Couch.

10:02 < jbeard> What version of Couch is Cloudant aiming to be compatible with for _users?

10:04 <+kocolosk> jbeard: http://wiki.apache.org/couchdb/Security_Features_Overview

10:04 <+kocolosk> see "Generating password_sha (only applicable for 1.1.x and earlier)"

10:04 <+kocolosk> jbeard: this particular feature is the last bit where we are compatible with 1.1.x but not newer version

10:05 < jbeard> Excellent

10:05 < jbeard> That's what I needed to know

+4

Teraz 8 miesięcy później, cloudant nadal nie zostały zakodowane hasło. @ jbeard4 dlaczego nie zaakceptować własnej odpowiedzi? :) – Wei

+0

Listopad? '{" _id ":" org.couchdb.user: me "," _ rev ":" 1-5a723e0fb15bb4e0d61e56797ebd8df7 "," name ":" me "," role ": []," type ":" user "," password ":" pwd "}' – MrYellow

1

W rzeczywistości cloudant nie obsługuje generowanie wartości hash. Znalazłem alternatywę, która pozwala korzystać z _users db w służbie cloudant ...

https://github.com/doublerebel/cloudant-user

+0

Dzięki za to. Nie mogłem jednak rozpocząć pracy z projektem. Czy znasz odpowiedź na ten problem: https://github.com/doublerebel/cloudant-user/issues/1? –

+0

@ChrisSnow Nie używam kawy, więc używam tego w moim projekcie https://gist.github.com/weilu/10445007 –