Cloudant auth: baza danych brakujących użytkowników
Zostaję skonfigurowany z 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ć_users
Baza danych.
Przeczytałem FAQ autoryzacji Cloudanttutaji zawiera następujące instrukcje:
Czy mogę korzystać z funkcji zabezpieczeń CouchDB (baza danych użytkowników, obiekty zabezpieczeń, funkcje walidacji) na Cloudant?
Tak, możesz. Jeśli chcesz korzystać z bazy danych _users, musisz najpierw wyłączyć własne zabezpieczenia Cloudant dla ról, którymi chcesz zarządzać przez _users. Aby to zrobić, musisz PUT umieścić dokument JSON w następujący sposób w punkcie końcowym _security bazy danych (na przykładhttps://USERNAME.cloudant.com/DATABASE/_security):
{"cloudant": {"nobody": ["_reader", "_writer", "_admin"]}, "readers": {"names": ["demo"], "role": []}}
Te instrukcje działały dobrze i pozwoliły mi zaktualizować obiekt _security bazy danych.
Nie było jasne, jak skonfigurować bazę danych _users. Nie istniał automatycznie, więc próbowałem go utworzyć za pomocą zwykłego:
curl -X PUT $COUCH/_users
To działało dobrze, ale kiedy próbuję dodać nowego użytkownika do _users w następujący sposób:
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"}'
Wygląda na to, że tworzy dokument poprawnie:
{"ok":true,"id":"org.couchdb.user:me","rev":"3-86c3801fdb8c32331f5f2580e861a765"}
Ale nowemu użytkownikowi w _users w Cloudant brakuje hashowanego hasła:
{
"_id": "org.couchdb.user:me",
"_rev": "3-86c3801fdb8c32331f5f2580e861a765",
"name": "me",
"roles": [
],
"type": "user",
"password": "pwd"
}
Więc gdy próbuję się uwierzytelnić u tego użytkownika, pojawia się następujący błąd:
{"error":"bad_request","reason":"missing password_sha property in user doc"}
W mojej lokalnej instalacji CouchDB utworzenie nowego użytkownika w _users automatycznie utworzy hashed password:
{
"_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 skopiować dokument „_design / _auth” z mojej lokalnej instalacji CouchDB do Cloudant, ale wyniki są takie same - bez hasła.
Wydaje mi się, że w pewnym momencie zszedłem z szyn, ale nie wiem, gdzie to się stało. Jak mogę skonfigurować Cloudant, aby używał tego samego rodzaju autoryzacji co zwykły CouchDB?