Cloudant で CouchDB をセットアップしていますが、Cloudant は通常の CouchDB とは異なる方法で認証を行うように見えるため、混乱しています。具体的には、Cloudant には_users
データベースがないようです。
ここでCloudant auth FAQ を読んだところ、次の手順が記載されていました。
Cloudant で CouchDB のセキュリティー機能 (_users データベース、セキュリティー・オブジェクト、検証機能) を使用できますか?
はい、できます。_users データベースを使用する場合は、最初に、_users を介して管理するロールに対して Cloudant 自体のセキュリティーをオフにする必要があります。これを行うには、次のような JSON ドキュメントをデータベースの _security エンドポイントに PUT する必要があります (例 : https://USERNAME.cloudant.com/DATABASE/_security )。
{ "cloudant": { "nobody": ["_reader", "_writer", "_admin"] }, "readers": { "names":["demo"],"roles":[] } }
これらの手順は問題なく機能し、データベースの _security オブジェクトを更新できました。
明確ではなかったのは、_users データベースのセットアップ方法です。自動的には存在しなかったので、通常の方法で作成してみました:
curl -X PUT $COUCH/_users
これはうまくいきましたが、次のように _users に新しいユーザーを追加しようとすると:
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"}'
ドキュメントが正しく作成されているようです。
{"ok":true,"id":"org.couchdb.user:me","rev":"3-86c3801fdb8c32331f5f2580e861a765"}
しかし、Cloudant の _users の新しいユーザーには、ハッシュ化されたパスワードがありません。
{
"_id": "org.couchdb.user:me",
"_rev": "3-86c3801fdb8c32331f5f2580e861a765",
"name": "me",
"roles": [
],
"type": "user",
"password": "pwd"
}
したがって、このユーザーで認証しようとすると、次のエラーが発生します。
{"error":"bad_request","reason":"missing password_sha property in user doc"}
私のローカル CouchDB インストールでは、_users で新しいユーザーを作成すると、ハッシュ化されたパスワードが自動的に作成されます。
{
"_id": "org.couchdb.user:test",
"_rev": "1-9c1c4360eba168468a37d7f623782d23",
"password_scheme": "pbkdf2",
"iterations": 10,
"name": "test",
"roles": [
],
"type": "user",
"derived_key": "4a122a20c1a8fdddb5307c29078e2c4269abffa5",
"salt": "36c0c05cf2a3ee321eabd10c46a8aa2a"
}
「_design/_auth」ドキュメントをローカルの CouchDB インストールから Cloudant にコピーしようとしましたが、結果は同じで、ハッシュ化されたパスワードはありません。
ある時点で脱線したように見えますが、これがどこで起こったのかはわかりません。通常の CouchDB と同じ種類の認証を使用するように Cloudant を設定するにはどうすればよいですか?