【问题标题】:Generate oAuth nonce for parallel requests为并行请求生成 oAuth 随机数
【发布时间】:2014-10-02 22:20:12
【问题描述】:

我正在并行请求 Bitstamp API:

// Simplified version

var async = require('async');
var bitstamp = require('bitstamp');

async.parallel([
    bitstamp.balance,
    bitstamp.ticker
    // ...
],
function() (err, result) {
    // process results
});

这两种方法向 Bitstamp API 发送签名请求,包括 nonce

Nonce 是一个常规整数。它必须随着您提出的每个请求而增加。在此处阅读更多相关信息。示例:如果您在第一个请求中将 nonce 设置为 1,则必须在第二个请求中将其设置为至少 2。您不需要从 1 开始。通常的做法是对该参数使用 unix 时间。

底层库生成nonce的传统方式:

var nonce = new Date().getTime() + '' + new Date().getMilliseconds();

问题

由于异步 API 调用,有时 nonce 会在同一毫秒内生成它,而远程端希望它们增加。

问题

保持并行请求,是否有可靠地生成顺序随机数的想法?

我的明显尝试:

this.nonce = new Date().getTime() + '' + new Date().getMilliseconds(); 
// ... on request
var nonce = this.nonce++;

但这并没有解决问题,同样的毫秒只是增加了1,但仍然相等。

【问题讨论】:

    标签: node.js api oauth


    【解决方案1】:

    (这里是 npm 模块的作者)

    我通过在 ms 时间戳末尾添加我自己的计数器来解决它。它现在支持每毫秒最多 999 个调用 because of this function。第一次它会生成类似1409074885767000 的东西,如果你在同一毫秒内需要一个新的随机数,它将生成14090748857670011409074885767002、...

    【讨论】:

      【解决方案2】:

      我遇到了完全相同的问题,所以我拿了 askmike 的代码并稍作修改。

      var nonce = new (function() {
      
          this.generate = function() {
      
              var now = Date.now();
      
              this.counter = (now === this.last? this.counter + 1 : 0);
              this.last    = now;
      
              // add padding to nonce
              var padding = 
                  this.counter < 10 ? '000' : 
                      this.counter < 100 ? '00' :
                          this.counter < 1000 ?  '0' : '';
      
              return now+padding+this.counter;
          };
      })();
      

      这样使用

      nonce.generate();
      

      查看我的jsfiddle with example

      【讨论】:

        【解决方案3】:

        npm nonce 模块现在可以正确生成它

        【讨论】:

        • 哪个 npm 模块?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-16
        • 2013-05-27
        • 2019-05-18
        • 2015-11-14
        • 1970-01-01
        • 2015-03-01
        • 2012-03-24
        相关资源
        最近更新 更多