【发布时间】:2012-09-17 21:50:14
【问题描述】:
我有一个网络应用程序,它可以向他们的 flickr api 验证用户。它利用 OAuth 1.0 并且大多数时间都可以进行身份验证。但是在随机时间,在完全随机的时间,flickr 无法识别我的签名。它在请求请求令牌时返回无效签名错误。但是下一次尝试中的相同代码会正确带回请求令牌。
我怀疑这与我生成随机数或时间戳的方式有关。否则它不应该在连续尝试中起作用,对吧?
这就是我生成随机数和时间戳值的方式:
$nonce = md5(microtime(true).rand());
$timestamp = mktime();
这有什么问题吗?有没有更好的方法来生成 nonce 值?这种随机故障非常令人困惑。我想不出任何其他原因导致我收到无效错误,随机!
跟进
根据 Jan Gerlinger 的建议,我将 mktime() 更改为 time()。它肯定减少了发生的频率。但它仍然会在随机时间给出无效签名错误,在更改为 time() 后很少会出现,我可能会补充。
所以,我假设时间戳(mktime)是导致这些随机错误的问题之一。但是那里仍然有其他问题。也许在随机数生成?
【问题讨论】:
-
我建议记录所有请求以及它们是成功还是失败;然后尝试从中找到一种模式。
-
@Jack 我试图从中找出一种模式。但正如我所说,它发生在完全随机的时间。
-
没有什么是真正随机的;如果您说第二次尝试时使用相同的随机数和时间,则可能是完全不同的东西,例如临时服务器错误。