2012-02-01 16 views
1

私は、ajaxを使って認証サーバーにユーザー名とパスワードを送信する際に、どのようなことを覚えておく必要があるのだろうかと思います。私はphoneGapとjQueryを使用してWebアプリケーションを開発しています。これはとても新しいものです。正しい方法を確かめたいと思います。アドバイスは大歓迎です。ユーザー名とパスワードを認証サーバーに送信する際のベストプラクティスは何ですか?

+6

私の短いコメント:情報の非エンコードを送信しないでくださいHTTPS –

+0

を使用しています。送信前にエンコードする方法を使用してください。最適なタイプのエンコードは一方向であるため、プレーンテキストの値を見つけるために元に戻すことはできません。 – Jasper

答えて

1

これは自分で作成しているアプリですか、既存のウェブベースのサービスと話していますか?

HTTPSを使用する必要があります。利用可能であると仮定します。自分でウェブサイトを構築する場合は、多くの一般的なウェブサイトで使用されているのと同様のトークンベースのシステムを調べることをおすすめします。

基本的な流れは次のようになります:

  • あなたは、開発者は、APIキーと、おそらくいくつかの種類のトークンのサイトに登録します。
  • アプリでは、ユーザーのパスワードをアプリのトークンと組み合わせて、ハッシングアルゴリズムで実行します。
  • アプリは、ハッシュされたパスワードとAPIキーをサーバーに送信します。
  • ユーザーの資格情報がチェックアウトされている場合、サーバーは短いトークンである認証トークンで応答します。あなたのアプリは、このトークンをサーバーに要求するたびに含める必要があります。
  • 認証トークンがある時点で期限切れになることがあるため、ある時点で認証を再認証する必要があります。

一般に、ユーザーのパスワードはプレーンテキストで保存しないでください。サーバーの認証システムと互換性のある形式でハッシュし、その値を格納します。

+0

私は情報を既存のWebサービスに送信します。 APIキーを使用せずにパスワードをhttpsで十分にハッシュ化すれば十分でしょうか? – Josh

+0

これはあなたが話しているWebサービスに依存することになります。公開されているAPIドキュメントはありますか?おそらく、相互作用のあるパターンを期待しているでしょう。これらのAPIの一般的な動作の詳細な例については、[flickr API documentation](http://www.flickr.com/services/api/auth.oauth.html)を参照してください。これはちょうど "ログイン"よりも少し複雑です。 –

2

チャレンジレスポンスメカニズムを使用する必要があります。

サーバーは、クライアントに再使用不可能な期限切れナンスとユーザーの塩を送信する必要があります。
クライアントはsaltでパスワードをハッシュし、生成されたハッシュをnonceでハッシュし、そのハッシュをサーバーに戻します。

サーバーでは、事前に暗号化されたパスワードハッシュをデータベースに格納する必要があります。
次に、格納されたハッシュをnonceでハッシュし、それをクライアントからのハッシュと比較する必要があります。

攻撃者がアクティブなman-in-the-middleであってデータベースを盗んだとしても、攻撃者は元のパスワードを知ることができません。
しかし、攻撃者がデータベースを盗むと、UIをバイパスして既知のハッシュを使用してログインできます。

関連する問題