0

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

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

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

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

  1. 发布参数?
  2. 曲奇饼?
  3. 别的东西?
4

2 回答 2

2

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

  1. 生成一个随机数
  2. 尝试将其保存到数据库(或任何其他共享存储)中
  3. 如果它已经存在于数据库中,请转到第 1 步。如果不存在,请转到第 4 步
  4. 发送令牌

广告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。例如,将当前日期添加到该数字,对其进行散列,等等。请注意不要过度使用它。

还要记住从旧令牌中清理数据库。

Q2没关系。什么适合你。可能将其放入 cookie 中是最简单的解决方案。

于 2013-09-13T14:29:31.740 回答
1

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

于 2013-09-13T14:26:12.177 回答