我有一个 Web 应用程序,可以向他们的 flickr api 验证用户。它利用 OAuth 1.0 并且大多数时间都可以进行身份验证。但在随机时间,在完全随机的时间,flickr 无法识别我的签名。它在请求请求令牌时返回无效签名错误。但是下一次尝试中的相同代码将正确带回请求令牌。
我怀疑这与我生成随机数或时间戳的方式有关。否则它不应该在连续尝试中起作用,对吧?
这就是我生成随机数和时间戳值的方式:
$nonce = md5(microtime(true).rand());
$timestamp = mktime();
这有什么问题吗?有没有更好的方法来生成 nonce 值?这种随机故障非常令人困惑。我想不出任何其他原因会导致无效错误,随机!
跟进
根据 Jan Gerlinger 的建议,我将 mktime() 更改为 time()。它肯定减少了发生的频率。但它仍然会在随机时间给出无效的签名错误,在更改为 time() 之后很少会出现,我可能会补充。
所以,我假设时间戳(mktime)是导致这些随机错误的问题之一。但是那里仍然有其他问题。也许在 nonce 一代?