0

私は単一ページのnode.js FB Canvas Appを持っています。すべてのユーザー アクションは、node.js HTTPS サーバーへの AJAX POST をトリガーし、結果を返します。

ここで、アプリの起動時に userId から作成したユーザー トークンを送信する方法が必要です (これも AJAX POST であり、すべてのコンテンツとユーザー トークンを返します)。サーバーで Graph API 呼び出し (別の理由でブートに必要) を実行して、このユーザーであることを確認します。

Q1 では、トークンを作成するには何を使用すればよいですか?

Q2 すべての AJAX 呼び出しでトークンを送信する方法:

  1. POST パラメータ?
  2. クッキー?
  3. 他の何か?
4

2 に答える 2

2

Q1トークンは一意で安全であるべきだと思います。これは一般的に簡単な問題ではありません。次の手順を実行します。

  1. 乱数を生成する
  2. DB(または他の共有ストレージ)に保存してみてください
  3. DB に既に存在する場合はステップ 1 に進みます。そうでない場合はステップ 4 に進みます
  4. トークンを送る

Ad.1。crypto.randomBytes衝突を最小限に抑えるために、十分な大きさのsizeパラメータ (256 以上) を使用して乱数を生成するには:

http://nodejs.org/api/crypto.html#crypto_crypto_randombytes_size_callback

crypto.randomBytes安全でなければなりません。ただし、いくつかの微妙な点があります。たとえば、マシンに十分なエントロピーがあることを確認する必要があります。サーバーにキーボード、マウス、またはマイクがない場合、問題になる可能性があります。ハードウェア エントロピー ジェネレーターはいつでも追加できます。

http://en.wikipedia.org/wiki/Hardware_random_number_generator

安全である必要がない場合は、crypto.pseudoRandomBytes代わりに使用できます。

また、独自のアルゴリズムを作成して使用することもお勧めします (もちろんベースcrypto)。たとえば、その番号に現在の日付を追加したり、ハッシュしたりします。やり過ぎないようにだけ気をつけてください。

また、古いトークンから DB を消去することについても覚えておいてください。

Q2特に問題ありません。あなたに合ったものは何でも。おそらく、クッキーに入れるのが最も簡単な解決策です。

于 2013-09-13T14:29:31.740 に答える
1

CSRF 攻撃を防ぐためにこのトークンが必要な場合は、POST パラメータに送信することをお勧めします。

于 2013-09-13T14:26:12.177 に答える