如何在NodeJS中使用生成的nonce并在没有数据库调用的情况下进行validation?

我正在生成一个随机数来validation向导的步骤,以确保它一个接一个。

我知道如何在nodejs中创buildnonce并将其存储在数据库中以确保它可以被使用一次。

但是我想知道,是否有一个想法来生成和validation一个随机数就像只能使用一次,如果可能的话,可以在一个时间限制(到期)内使用,而不是将其存储在数据库中,而只是返回到在一个向导步骤中的客户端并在下一步validation相同。

我通常使用下面的方法来生成随机数,将其归一化,并将其存储在一个有时间的MongoDB中,以便mongodb在特定时间后将其删除,如果它没有被使用的话。

var crypto = require('crypto'); crypto.randomBytes(32, function (err, bytes) { if (err) { next(err); } else { next(null, normalize(bytes)); } }); 

请build议是否有任何生成nonce的优化/优化方式,而不用数据库调用来处理一次性使用和过期的可能性。

有一个数据库来存储和validationnonce总是更好的做法。 为了限制时间,你可以使用一个有效期满的mongodb,或者你可以生成时间戳,然后用时间戳,随机数和私钥生成一个hmac 。 然后把nonce,timestamp&hmac发送给客户端。 这样,您可以确保时间戳,如果您的数据库不支持文档过期作为mongodb,您可以限制特定时间的随机数。 希望解释。

没有数据库调用,可能会有一个时间过期的临时值,使用类似服务器上的哈希映射来存储和检索临时值并检查时间。 如果有会话ID或静态用户ID,这将有所帮助。 但是,与经过testing的解决scheme(如MongoDB)相比,使服务器生成,保持,获取并保持随机数的想法似乎很困难。 在服务的多个服务器的情况下会发生另一个皱纹,其中stream量将不得不保持对于会话始终完成一致。 使用一个数据库的单一来源的事实修复。

如果在节点服务器上保留随机数的原因是速度/滞后,则可能需要额外的testing和代码。 在这种情况下,为了保持快速search,需要定期扫描过期的超时。