通过POST或cookie发送令牌?

时间:2013-09-13 13:54:24

标签: javascript ajax node.js web

我有一个单页node.js FB Canvas App。每个用户操作都会触发一个AJAX POST到我的node.js HTTPS服务器,返回结果。

现在我需要一种方法来发送我在app boot上从userId创建的用户令牌(这也是一个AJAX POST,返回所有内容+用户令牌)。我通过在服务器上执行Graph API调用(出于其他原因我的启动需要)来验证是否是此用户。

Q1那么要创建令牌我应该使用什么?

Q2如何在每次AJAX调用时发送令牌:

  1. POST param?
  2. 饼干?
  3. 别的什么?

2 个答案:

答案 0 :(得分:2)

Q1 我认为令牌应该是唯一且安全的。这通常不是一个容易的问题。我会采取以下步骤:

  1. 生成随机数
  2. 尝试将其保存到DB(或任何其他共享存储)
  3. 如果已存在于DB中,请转到步骤1.如果不是,请转到步骤4
  4. 发送令牌
  5. 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 这并不重要。无论什么适合你。可能将它放入cookie中是最简单的解决方案。

答案 1 :(得分:1)

如果您需要此令牌来防止CSRF攻击,我建议将其发送到POST参数。