繁体   English   中英

flickr oauth api随机返回签名无效错误

[英]flickr oauth api returns signature invalid error at random times

我有一个Web应用程序,可对用户的flickr api进行身份验证。 它利用OAuth 1.0进行身份验证,大部分时间都是有效的。 但是在随机时间,在完全随机的时间,flickr无法识别我的签名。 在请求请求令牌时返回无效签名错误。 但是在下一次尝试中使用相同的代码将正确地带回请求令牌。

我怀疑这与我生成随机数或时间戳的方式有关。 否则,它不应在连续尝试中起作用,对吗?

这就是我生成随机数和时间戳值的方法:

$nonce   = md5(microtime(true).rand());
$timestamp  = mktime();

这有什么问题吗? 有没有更好的方法来产生现时价值? 这种随机故障非常令人困惑。 我想不出任何其他原因,为什么我会得到一个无效的错误!


跟进

根据Jan Gerlinger的建议,我将mktime()更改为time()。 它确实减少了发生的频率。 但是我还是会补充说,它仍然会在随机时间给出无效的签名错误,很少更改为time()之后。

因此,我假设timestamp(mktime)是导致这些随机错误的问题之一。 但是那里还有其他问题。 也许是现时的一代?

根据您的PHP版本 ,您应该使用time()而不是mktime()

对于随机数, 文档说:

随机数是一个随机字符串,由客户端唯一生成,以允许服务器验证以前从未提出过请求,并有助于防止在通过非安全通道发出请求时发生重放攻击。 随机数值在所有具有相同时间戳,客户端凭证和令牌组合的请求中必须唯一。

如果rand()将在一微秒内两次返回相同的值,则两次将得到相同的随机数。 另外,由于MD5冲突,生成MD5哈希也不能保证您获得唯一的值。 更好的方法是在全局范围内分配随机数

但是,如果您经常遇到此错误,则随机数可能不是您的问题,因为这些冲突不应该经常发生。

有时, 无效签名错误的问题在于客户端的服务器时间与提供者的服务器时间不同,因此您可以通过时间同步来检查服务器上是否发生奇怪的事情。

没有更多的信息,我不得不推测它与签名本身有关。

我可以告诉您的是, time()mktime()是同一件事,因此它们不是您的根本原因。

我发现有时签名可能包含base64字母+ 如果编码不正确,可能会引起一些问题; 在下一个请求时,它可能会消失并且该请求将通过。

如果这是家庭酿造的代码,我建议您共享该代码,同时建议您使用更受信任的解决方案,例如oauth-php项目或oauth PECL扩展。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM