Javascript 通过邮寄或cookie发送令牌?

Javascript 通过邮寄或cookie发送令牌?,javascript,ajax,node.js,web,Javascript,Ajax,Node.js,Web,我有一个单页node.js FB Canvas应用程序。每个用户操作都会触发到my node.js HTTPS服务器的AJAX帖子,并返回结果 现在我需要一种方法来发送我在应用程序启动时从userId创建的用户令牌(这也是一篇AJAX文章,返回所有内容+用户令牌)。我通过在服务器上执行Graph API调用(出于另一个原因,启动时需要调用Graph API)来验证是否是该用户 Q1那么要创建令牌,我应该使用什么 Q2如何在每次AJAX调用中发送令牌: 后参数 饼干 还有别的吗 如果您需要此令牌以

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

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

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

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

  • 后参数
  • 饼干
  • 还有别的吗

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

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

    Q1我假设令牌应该是唯一和安全的。这通常不是一个容易的问题。我将采取以下步骤:

  • 生成一个随机数
  • 尝试将其保存到DB(或任何其他共享存储)中
  • 如果它已经存在于数据库中,请转至步骤1。如果没有,请转至步骤4
  • 发送令牌
  • 公元1年。要生成随机数,请使用足够大的
    size
    param(256就足够了)的
    crypto.randomBytes
    ,以最小化冲突:

    crypto.randomBytes
    应该是安全的。然而,它也有一些微妙之处。例如,你必须确保你的机器有足够的熵。当您的服务器没有键盘、鼠标或麦克风时,可能会出现问题。始终可以添加硬件熵生成器:

    如果您不需要它的安全性,那么可以使用
    crypto.pseudoRandomBytes

    另外,创建并使用自己的算法也是一个好主意(当然是基于
    crypto
    )。例如,将当前日期添加到该数字,将其散列,等等。小心别做得太过分

    还记得如何从旧令牌中清除DB


    Q2这其实并不重要。随便你喜欢什么。可能将其放入cookie中是最简单的解决方案。

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

  • 生成一个随机数
  • 尝试将其保存到DB(或任何其他共享存储)中
  • 如果它已经存在于数据库中,请转至步骤1。如果没有,请转至步骤4
  • 发送令牌
  • 公元1年。要生成随机数,请使用足够大的
    size
    param(256就足够了)的
    crypto.randomBytes
    ,以最小化冲突:

    crypto.randomBytes
    应该是安全的。然而,它也有一些微妙之处。例如,你必须确保你的机器有足够的熵。当您的服务器没有键盘、鼠标或麦克风时,可能会出现问题。始终可以添加硬件熵生成器:

    如果您不需要它的安全性,那么可以使用
    crypto.pseudoRandomBytes

    另外,创建并使用自己的算法也是一个好主意(当然是基于
    crypto
    )。例如,将当前日期添加到该数字,将其散列,等等。小心别做得太过分

    还记得如何从旧令牌中清除DB


    Q2这其实并不重要。随便你喜欢什么。也许把它放在饼干里是最简单的解决办法。

    @aremie我们两个可能都不知道他们用什么(如果有的话)来创造熵,所以我想你应该问问他们。除非安全不是问题,它是。我会问他们的,谢谢你的回答。把我推向正确的方向。@aremie我们俩可能都不知道他们用什么(如果有的话)来创造熵,所以我想你应该问问他们。除非安全不是问题,它是。我会问他们的,谢谢你的回答。把我往正确的方向推,我来做POST param!我来做POST param!