可能导致令牌过期的原因是什么(除了让用户取消授权应用程序之外)?
我的问题是我有一个拥有数千名用户的应用程序,所有API通信都能正常运行,但对于某些用户我收到了invalid or expired token
错误,我的首要问题是他们是取消身份验证的用户应用程序,但我已联系其中一些,他们没有撤销访问。
任何其他问题可能导致错误的想法?
答案 0 :(得分:15)
使用该访问令牌时,通过调用GET account/verify_credentials随时检查访问令牌的完整性。
它提到并通过研究我了解到:
如果用户明确拒绝您的访问令牌,您的访问令牌将无效 应用程序从他们的设置或Twitter管理员暂停您的 应用。如果您的申请被暂停,将会有一个说明 您的申请页面说它已被暂停。
为什么我的twitter oauth访问令牌无效/已过期?
查看此帖子:invalid / expired access tokens。
Google群组中有一篇文章说:
你没有第二次机会,这是设计的。 OAuth请求 有独特的签名;一旦提交了特定请求,就可以了 无法再次提交。 如果他们正确地输入了引脚,一切都很顺利,你会得到一个访问令牌。 如果他们输入错误的针,你会得到401 Unauthorized - 这是 预期。 但如果他们再次尝试输入引脚,即使是正确的引脚 显示为未经授权。
检查此link以获取上述参考资料。
twitter员工对同一问题的一些建议:
我想在这一点上我会建议两件事:1。)转到 您的应用程序设置并使用“重置键”选项卡重置您的 消费者密钥和秘密,然后在应用程序中更新这些值 验证您仍然看到相同的行为。 2.)尝试传球 request_token调用中的oauth_callback。老实说,我不这么认为 会有所作为,但我想尝试尽可能严谨 这里。
另请查看此discussion说:
您需要使用从oauth_token返回的oauth_token_secret oauth / access_token调用而不是应用程序设置中的调用 在dev.twitter.com
答案 1 :(得分:4)
除了其他人所做的评论之外,当令牌不是问题时,有时twitter api会返回“无效令牌”错误。当我构建了一个无法正确解析的请求字符串时,我注意到了它。例如,当我在传递具有不可URI编码的符号的screen_name时,我收到了该错误。当我传入这样的空值(光标为空)时,我也得到了它:
https://api.twitter.com/1/followers.json?cursor=&screen_name=whatevah
您能否告诉我们返回此错误的调用的具体信息?
答案 2 :(得分:3)
我得到同样的错误,然后我改变了(access_token) to (access_token_key)
,这对我有用。
我希望它会帮助别人。
答案 3 :(得分:1)
首先好问题冉。
我想问你有没有通过Twitter开发人员?
有时,由于Twitter提供了两对令牌和库,因此使用哪个令牌变得模棱两可。其中一个是秘密密钥。
您需要选择以您的Twitter ID开头后跟连字符的标记。
现在您的问题是您的某些用户会发生此错误。所以这里是一个应用程序本身发现选择令牌不明确的答案。
虽然我可能不完全正确,但我建议您至少尝试一次此解决方案。
答案 4 :(得分:1)
这些用户可能有不撤销访问权限。但根据我的经验,在用户(在测试用例中:我)更改了他/她的密码之后,访问令牌也会过期。
当用户执行此操作时,您无法再在该用户的范围内使用流API的REST API。请根据具体情况调整您的应用程序。撤消用户的会话,因此当他回到您的应用程序时,他/她可以再次被重定向到Twitter以启动新的OAuth访问令牌进程。或者发送电子邮件给他/她,请他重新联系。 Vimeo / Windows / ...是处理带有电子邮件的过期令牌的人。
玩得开心!
答案 5 :(得分:1)
My God's answer是正确的,但我会分享my answer from another question解释它是如何成为您计算机的时钟:
如果您的OAuth流程在某一天工作而下一次失败,请检查计算机的时钟。我正在运行一个Vagrant盒子,它的时间设置为前一天,这导致Twitter API返回{“code”:89,“message”:“令牌无效或过期。”}。这也可能显示为401时间戳超出范围。您可以使用此命令在Ubuntu中更新您的时钟:
sudo ntpdate time.nist.gov
如果您的系统上没有ntpdate
,则
sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z"
答案 6 :(得分:1)
如果您的访问令牌= 738629462149844993-FcWHjfcucCLGEosyGGQ38qI ****** iC,请不要忘记提及连字符( - )后跟您的USERID。
答案 7 :(得分:0)
这可能会对你有所帮助。我遇到了同样的问题。
请找到下面的代码片段
$code = $tmhOAuth->user_request(array(
'method' => 'POST',
'url' => $tmhOAuth->url('oauth/access_token', ''),
'params' => array(
'oauth_verifier' => trim($params['oauth_verifier']),
)
));
if ($code == 200) {
$oauth_creds = $tmhOAuth->extract_params($tmhOAuth->response['response']);
// echo '<pre>';print_r($oauth_creds);exit;
$tmhOAuth->reconfigure(array_merge($tmhOAuth->config, array(
'token' => $oauth_creds['oauth_token'],
'secret' => $oauth_creds['oauth_token_secret'],
)));
$code = $tmhOAuth->user_request(array(
'url' => $tmhOAuth->url('1.1/account/verify_credentials')
));
}
答案 8 :(得分:0)
您是否确认令牌一次有效?在我工作的OAuth系统中,安全存储和检索令牌的错误导致其中一小部分令人损坏。如果您可以确认令牌在过去有效,那么这是一个很好的第一步。
从存储中检索令牌时,它们是否保持不变?他们管理它们的方式是否有可能被破坏?
将一些日志记录到位以跟踪令牌何时工作和失败。令牌在失败一次后是否会再次开始工作?如果您未使用令牌30天,它是否会过期?通过详细的日志,您可以开始识别过期的令牌,并查找正在使用的模式,以指出可能导致它们过期的内容。
一定要探索其他可能性。用户如何在Twitter中撤销令牌?这不小心容易吗?对于令牌失败的用户,他们是否还有其他已停止工作的授权应用程序?
答案 9 :(得分:0)