Q1我认为令牌应该是唯一且安全的。这通常不是一个容易的问题。我会采取以下步骤:
- 生成一个随机数
- 尝试将其保存到数据库(或任何其他共享存储)中
- 如果它已经存在于数据库中,请转到第 1 步。如果不存在,请转到第 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 中是最简单的解决方案。