2013-08-04 7 views
18

Ich bin mit CouchDB auf Cloudant eingerichtet, und ich bin verwirrt, weil Cloudant scheint Auth anders als normale CouchDB zu tun. Insbesondere scheint Cloudant eine _users Datenbank zu fehlen.Cloudant Auth: fehlt _users Datenbank

las ich die Cloudant Auth FAQ here, und es wurden die folgenden Anweisungen:

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":[] } }

Diese Anleitung hat gut funktioniert, und mir erlaubt, das _Sicherheit Objekt einer Datenbank zu aktualisieren.

Was nicht klar war, war, wie die _users-Datenbank eingerichtet wurde. Es existierte nicht automatisch, also habe ich versucht zu schaffen es mit einem normalen:

curl -X PUT $COUCH/_users

Das funktionierte gut, aber wenn ich einen neuen Benutzer _users hinzuzufügen versuchen, wie folgt:

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"}' 

es scheint, das Dokument korrekt zu erstellen:

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

Aber den neuen Benutzer in _users auf Cloudant fehlt ein Hash-Passwort: So

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

, wenn ich an diesem Benutzer zu authentifizieren versuchen, erhalte ich folgende Fehlermeldung:

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

Auf meiner lokalen CouchDB Installation, einen neuen Benutzers in _users Erstellung würde automatisch erstellen Sie die Hash-Passwort:

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

ich habe versucht, die "_Design/_auth" Dokument von meinem lokalen CouchDB Installation Cloudant Kopieren, b ut die Ergebnisse sind gleich - kein gehashtes Passwort.

Ich bin anscheinend von den Schienen gegangen, aber ich bin mir nicht sicher, wo das passiert ist. Wie kann ich Cloudant so einrichten, dass er dieselbe Art von Authentifizierung verwendet wie die normale CouchDB?

Antwort

12

fand ich die Antwort über #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

Jetzt, 8 Monate später cloudant noch nicht über Hash-Passwort. @ Jbeard4 Warum nicht deine eigene Antwort akzeptieren? :) – Wei

+0

November? '{" _id ":" org.couchdb.user: me "," _ rev ":" 1-5a723e0fb15bb4e0d61e56797ebd8df7 "," Name ":" mich "," Rollen ": []," Typ ":" Benutzer "," passwort ":" pwd "}' – MrYellow

1

In der Tat, cloudant nicht die Hash-Wert Generation unterstützen. ich diese Alternative gefunden, die den _users db in der cloudant Service nutzen hilft ...

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

+0

Danke dafür. Ich konnte jedoch mit dem Projekt nicht beginnen. Kennen Sie die Antwort auf dieses Problem: https://github.com/doublerebel/cloudant-user/issues/1? –

+0

@ChrisSnow Ich benutze keinen Kaffee, daher verwende ich diesen Gedanken in meinem Projekt https://gist.github.com/weilu/10445007 –