2012-01-06 20 views
0

ユーザーが登録して電子メール/パスワードでサインインするシンプルなiPhoneアプリケーションを開発しています。これらの値は、リモートデータベースに格納されます。iPhoneアプリケーションで安全にリモートデータベースの資格情報を保存する

私はCloudantを使用してこの情報を保存しています(CouchDBは素晴らしい)。新しいユーザー(作成されたAPIキー/パス)に読み取り専用の権限を与えました。 Cloudantと通信するには、アクセスするためのURL(例:https://user:[email protected])が必要です。アプリ内には文字列として格納されています。

これはかなり安全ではないことはわかっていますが、db URLを安全に保つために他の選択肢は考えられません(特にユーザー名/パスワード)。私は人々が信任状を得るためにプロキシを介して別のサーバーを使用することについて話をしてきましたが、少し厄介なようです。

ご意見やご感想は本当にありがとうございます。

答えて

1

iPhoneアプリから直接データベースに接続しようとしていますか?あなたのアプリケーションに、リモートユーザのテーブル/データベース全体への読み取りアクセス権を与えるべきではありません。遅かれ早かれ誰かが見つけて、あなたのデータへの読み込みアクセス権を持っています。どのように難読化しようとしても、ユーザとパスワードの組み合わせは何らかの形でアプリに保存する必要があります。

DBに接続してユーザーを確認するWebサービスを構築する必要があります。データベースのパスワードはサーバー上にとどまります。このプロキシアプローチは厄介ではなく、データベースログインをユーザーから遠ざける唯一の方法です。

+0

これは私がそうだと思ったことです。私は、Webサービスを持っている別のレイヤー(別のサーバー)を追加するという面では意味がありませんでした。しかし、それが(そして他人が同じことをする方法である)方法であれば、それでいいです!私はベストプラクティスのアプローチ、歓声より後になった! – crawf

+0

これは、ストレージ(データベース)を抽象化するのがベストプラクティスです。 Webサービスは、アプリケーションに「ユーザー/パスの組み合わせOK」または「無効なログイン」としか応答しません。これに関しては、実際にはプロキシではなく、HTTPでアクセスできるサーバー機能と考えてください; – shapecatcher

+0

いいですね! WebサービスのURLは引き続きアプリ内にありますが、ユーザーの資格情報はPOST経由で送信されます。これは、データベースに直接アクセスするよりも優れています。あなたの洞察に感謝します! – crawf

1

1つの選択肢は、ストレージを抽象化する独自のサービスをクラウド内に作成することです。また、すべてのデバイスを更新せずにストレージを変更できるという利点もあります。

このモデルでは、サービスはストレージにアクセスするための資格情報を格納し、アプリケーション層にユーザーセキュリティを実装します。私はそれをプロキシ・レイヤーとは考えていません。それは、それが細いパススルーであることを意味します。サービスを開発する場合は、ストレージに不可知論的なWebインターフェイス(休憩、石鹸)を定義する必要があります。その場合、プロキシではなくサービスです。

EDIT:

は、一般的にWebサービスが(自分自身を書いていない)ユーザーを認証します。 SSLを使用した基本認証が一般的です。次に、そのサービスコンテキストAPIでは、ユーザー名にアクセスできます。そこから、必要なものを手に入れます。ストレージには、すべてのコンテンツに完全にアクセスできるストレージアカウントを1つ使用してアクセスします。

もう1つの認証オプションは、Googleのような誰かと認証できるOAuthです。パスワードは決して得られません。Googleからのトークンで、認証されたことを彼らに伝えます。たとえば、スタックオーバーフローの仕組みです。

+0

だから、もし私がこの権利を持っていれば...典型的なユーザーログインの場合、彼らは電子メール/パスワードを入力し、そのサービスで設定されたサーバーに送信されます。そこからCloudAntと通信してログイン情報を確認し、リクエストをサービスに返します。サービスに戻り、アプリに戻ります。それでも、クラウドサービスのURLをアプリに保存する必要があることを意味します。誰かがそのURLに直接アクセスするのを止めるにはどうすればよいですか? – crawf

+0

通常、Webサービスはユーザーを認証します(自分では書きません)。 SSLを使用した基本認証が一般的です。次に、そのサービスコンテキストAPIでは、ユーザー名にアクセスできます。そこから、必要なものを手に入れます。ストレージには、すべてのコンテンツに完全にアクセスできるストレージアカウントを1つ使用してアクセスします。 – bryanmac

+0

もう一つの認証オプションはOAuthで、Googleのような誰かと認証することができます。パスワードは決して得られません。認証されたことをGoogleに知らせるだけのトークンです。たとえば、スタックオーバーフローの仕組みです。 – bryanmac

関連する問題