2012-02-28 14 views
5

背景研究:セキュアクライアント側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 - 特に "アリNajarian" さんの記事

質問:

私が上に投稿したSOの質問を言い換えると:

"couchdbのcouchdbにアカウントを登録するためのサインアップフォームがあります。これにより、couchdb_usersデータベースに新しいユーザーが作成され、新しいユーザーがデータベース管理者の役割を割り当てられた新しいデータベースが作成されます。 "

上記の質問に対する回答は、couchdbを監視してクライアントからの特定のデータイベントに応じてcouchdbを変更するためにcouchdbに管理者としてログインしていた外部の別のサーバーを使用することに関連していました。 。

私の質問は - それは唯一の方法ですか?それはcouchdbの2層ウェブスタックの全目的を凌ぐものではありませんか?couchdbデータベースを変更する方法はありますか? ==ユーザー "文書を"内部的に "/別途管理者としてログインした場合

これを行う簡単な方法がある場合はお詫びします。適切な文書を見つける。

エクストラ問題の明確化:

  1. インターネットアドレスの前に座っCouchDBのインスタンスがあります。
  2. このcouchデータベースは、htmlページとサインイン/ログインフォームを含む埋め込みjavascriptスクリプトをランダムなクライアントに提供します。
  3. クライアントはサインイン情報(名前、パスワード)を入力して送信
  4. JSスクリプトはXMLHttpRequestオブジェクトを使用してcouchdbインスタンスへの接続を開き、送信します...問題!

問題#1 - 資格情報が(新しいユーザーデータベースの検証として送信される)コードに格納されている場合、誰もが "HTMLソースを表示"してデータベースを引き継ぐことができます。

-OR-

問題#2 - 資格情報が供給されず、要求が匿名で送信された場合、新しいユーザーが_usersデータベースに作成され、成功応答メッセージが送信されます。ユーザーがアプリケーション固有の目的(たとえば、データの追加/削除)を行うための新しいデータベースは作成されていません(管理者の資格情報を使用することもできません)。そして、上記のcouchbaseのブログのリンクから、匿名の書き込みを防ぐための匿名の読者と妥当性検査機能に対するロール/名前でデータベースを保護していれば、匿名のユーザーアカウント(たとえば、データベーススペースを登録してapp)は何もできません。匿名ユーザーは明らかなセキュリティ上の理由から、必要な役割を指定することができないからです。つまり、-functional-usersを持つ唯一の方法は、事前にユーザーアカウントと関連付けられたデータベースをadminとして作成してから、これらのユーザー資格情報を渡すことです。プライベートな招待システムのように、はい?

これを繰り返すには、couchdbとcouchdbの認証ハンドラ、デザインドキュメント関数、クライアントサイドのAjaxなどの組み合わせを使用して接続クライアントが登録してパーソナルデータベースを取得する方法はありますか?明らかに)彼らはアクセス権を持ち、相互作用することができますか?

+0

[User Signup in Couchapp/CouchDB through jquery.couch.jsまたはそれ以外]の可能な複製(http://stackoverflow.com/questions/5305543/user-signup-in-couchapp-couchdb-through-jquery-couch -js-or-otherwise) –

+0

私は、私の質問の「バックグラウンドリサーチ」セクションにその質問を掲載しました(そして2つの質問は今リンクされています)。私はこの記事を作成しました。なぜなら、他の質問に関する提案解決策は、couchdb層にもう1つのミニ層を追加することであり、この問題に対する「純粋な」couchdb解決策があるかどうかを知りたいのです。私は上記のリンクに投稿していただろうが、私は別の人の質問をハイジャックしたくなかった。 – jigritsn

+0

この質問は確かに関係しています。私は純粋で安全なcouchdb-onlyソリューションを手に入れたいです – gregm

答えて

3

ThisはPUREカウチソリューションではありませんが、それはソファ+ノードだし、あなたの問題を解決:

こんにちは私はしばらくの周りされていないと、この編集された/リンク削除を(実現しなかったプラス回答ではないリンクのポリシー!申し訳ありません...)。私は、あなたがやろうとしているものと非常によく似たプロジェクトでcouchdbを使っていますが、残念ながら、管理者レベルのアクセスとユーザーデータベースの作成を処理する別のサービスを利用せずに達成したいことはありません。 Syncpoint-API は、これを容易にするために使用されますが、実際はsignup/loginと専用データベースの設定を処理するnodejsサービスです。

これまでのところ、Syncpointは信頼性が100%ではないことが証明されており、CouchDBはCouchDB devからr + d個のリソースをすべて吸い出しているため、放棄されたプロジェクトと思われます。

ノードとハンドシェイクを使用してDBを割り当て、さらにサーバー上の(まだ別のノードプロセスを経由して)couch _changes apiを見て転送してから転送レイヤーとしてnodejs + socket.ioに移動します_changesからsocket.ioをクライアントに渡します。また私は、プライベートなデータと混合されたパブリックデータを提供するいくつかの "純粋な" couchappsを実行しています。

私の結論? CouchDBはすばらしい製品であり、いくつかの優れた機能を備えていますが、実際の開発者で必要とされるより複雑なログイン/認証スキームやその他の一般的なアプリケーションのニーズに対しては、まだ準備が整っていません。

+0

こんにちは、新しいユーザーと答えに感謝します。ソリューションの説明を少なくとも投稿してください。リンクだけでは、ガイドラインに従った回答は得られません(また、それらは削除される可能性があります)。 –

+0

@kfancy - 遅れて更新される心配はありません。私は月にこの質問をチェックしていません。 couchdbの_changesフィードとクライアントリクエストの間のメディエータとしてノードベースのミニティアを使用するソリューションは、もう1つのスタックオーバーフローの問題も示唆されています。 couchdbのアップデートのような真の解決策が今後発表されるという兆候はないように見えるため、答えを "解決策"として選択します。この問題に対処する経験を共有してくれてありがとう。 – jigritsn

+0

ギフトボックスでSyncpoint-APIレポが見つかりません – alecxe