2011-02-05 9 views
7

iPhoneとAndroid用のREST APIを使用してバックエンドアプリケーションを作成しています。内部APIです。iPhone/Android用の登録REST APIを実装する最善の方法は何ですか?

この時点で、ユーザーがモバイルアプリから登録できるようにユーザー登録APIを実装しようとしています。

私はDjangoを使って書いています.Djangoには、WebリクエストのためのCross Site Request Forgeryが付属しています。私はdjango-pistonを使用してREST APIのためにそれを無効にする必要があります。

登録APIをスパムから保護するにはどうすればよいですか?スロットル?キャプチャ?登録APIを実装するベストプラクティスは何ですか?落とし穴は何ですか?

モバイルアプリでウェブビューを読み込んで、CSRFを実装できるようにモバイルウェブ登録フォームを作成することを提案しました。ソリューションですが、モバイルデバイスごとにデザインページを作成したり、すべてのデバイスに適していない一般的なデザインページを作成したりする必要がありません。

多くのご支援をいただきありがとうございます。

乾杯、 ミッキー

答えて

1

私はOpenIDプロバイダを使用することがそれを達成するための素晴らしい方法であることに同意します。あなたはhttp://pypi.python.org/pypi/django-social-authまたは類似のプロジェクトになります。追加の利点は、データベースにパスワード認証情報を保存する必要がないことです。管理するデータが少なくて済み、データが少なくなります。

あなたは間違いなく、古典的なユーザ名/パスワードベースのスキームおよび付随登録(SOそのもののような多分OpenIDを一緒に基づいたもの)が必要な場合は、私は、ピストンが提供する絞るといいと思います。個人的には最後の手段としてキャプチャだけを使用していますが、RESTインターフェイス経由でキャプチャを使用するのはおそらく非常に面倒です。登録フェーズを続ける前にキャプチャをリクエストしますか?このユーザーがcaptcha(セッション+クッキー、...)を完了したことにどのように注意しますか? webviewを使わずにreCAPTCHAなどのサービスを使用することはできません。これにより、RESTアプローチ全体が古くなったIMOになってしまいます。

私はWebViewを使用して再訪します。インターフェイスをクリーンかつシンプルに保つと、スマートフォンプラットフォーム上のあらゆるコンベンションで邪魔されるべきではありません。

+0

ちょうど興味深い、なぜcaptchaは使用できないのですか? REST APIレベルで –

+3

確かに可能ですが、RESTを通してキャプチャ画像を取得し、それをユーザに表示してから、次の呼び出しで答えを返さなければなりません。あなたがセッションを必要とするので、APIが理想的ではないことがわかります。私はAPIコールの間に状態を保つことを嫌う。たぶんその私だけ。 –

+0

ステートレスなAPI呼び出し(これはRESTの基本原則の1つです)に同意します。しかし、あなたが自分のcapchaを動かしているのであれば、capchaのイメージURIの横に「トークン」(例えば、答えのMD5塩漬けのハッシュ)を返せない理由はありません。次に、APIを使用してモバイルアプリを確認し、発行された元のハッシュと一緒にユーザーの回答を送信します。 –

0

理由を説明するドキュメントでこのsectionをチェックし、あなたのREST APIのCSRFを心配する理由はありません。

スパムを防ぐ最も良い方法は、OpenIDプロバイダやFacebookなどの検証済みのソースからユーザーデータを収集することです。手動で行う場合は、最も簡単な方法はdjango-registrationとし、バックエンドの1つ。あなたは提供された単純なバックエンドを取ることができ、キャプチャフィールドでカスタムフォームを使用することができます。これは自動登録を排除するのに十分であるはずです。 pistonで接続するだけのシンプルでなければなりません。

EDIT:

そうだね、私は質問を再読み込み、私は完全にあなたはすでにあなたは、リモートのAndroid/iPhoneユーザーに対するあなたのRESTのAPIを開発している言及しているという事実を無視気づきました。したがって、あなたのAPIは公開されており、あなたのドメインやブラウザクライアントからのリクエストではないリクエストを受け入れることになります。

あなたの要求に完全に当てはまるため、Open API Authenticationを実装する必要があります。実際のユーザーと情報を交換していることがわかっていて、要求の発信元が気になることはありません。

+0

kRON:CSRFはAJAXの権利にのみ適用されると思いますか? REST APIでは、特にcsrf_exempt()を使用する必要があります。少なくとも、それは私がdjango-pistonによって提供されるREST APIを使ってPOSTしようとしたときにわかったものです。 –

+0

質問が*新しい*ユーザーを登録することです...だから登録エンドポイントを確保することはできません...それは彼が虐待されるかもしれないと心配している理由です –

関連する問題