可能导致令牌过期的可能原因是什么(除了让用户取消授权应用程序)?
我的问题是我有一个拥有数千名用户的应用程序,所有 API 通信都可以正常工作,但是对于某些用户,我遇到了invalid or expired token
错误,我最初的想法是他们是取消对应用程序的身份验证的用户,但我已经联系了一些用户其中,他们没有撤销访问权限。
任何想法还有哪些其他问题会导致该错误?
可能导致令牌过期的可能原因是什么(除了让用户取消授权应用程序)?
我的问题是我有一个拥有数千名用户的应用程序,所有 API 通信都可以正常工作,但是对于某些用户,我遇到了invalid or expired token
错误,我最初的想法是他们是取消对应用程序的身份验证的用户,但我已经联系了一些用户其中,他们没有撤销访问权限。
任何想法还有哪些其他问题会导致该错误?
通过在使用访问令牌时调用GET account/verify_credentials随时检查访问令牌的完整性。
它提到并通过研究我知道:
如果用户从他们的设置中明确拒绝您的应用程序,或者如果 Twitter 管理员暂停您的应用程序,您的访问令牌将无效。如果您的申请被暂停,您的申请页面上将会有一条说明,说明它已被暂停。
为什么我的 twitter oauth 访问令牌无效/过期?
检查这篇文章:无效/过期的访问令牌。
谷歌群组中有一篇帖子说:
你没有第二次机会,这是设计使然。OAuth 请求具有唯一的签名;一旦提交了特定请求,就不能再次提交。如果他们正确输入了密码,一切都很好,你会得到一个访问令牌。如果他们输入错误的密码,你会得到 401 Unauthorized - 这是预期的。但如果他们再次尝试输入密码,即使正确的密码也会显示为未经授权。
检查此链接以获取上述参考。
twitter 员工针对同一问题提出的一些建议:
我想此时我会建议两件事:1.)转到您的应用程序设置并使用“重置密钥”选项卡重置您的使用者密钥和秘密,然后在应用程序中更新这些值并验证您是否仍然看到相同的行为。2.) 尝试在 request_token 调用中传递 oauth_callback。老实说,我不认为这会有所作为,但我想在这里尽可能地严格。
还要检查这个讨论说:
您需要使用从 oauth/access_token 调用返回的 oauth_token 和 oauth_token_secret,而不是 dev.twitter.com 中应用程序设置中的那个
我遇到了同样的错误然后我改变(access_token) to (access_token_key)
了它对我有用。
我希望它会帮助某人。
除了其他人发表的评论外,有时当令牌不是问题时,twitter api 会返回“无效令牌”错误。当我构建一个无法正确解析的请求字符串时,我注意到它最多。例如,一旦我在传递具有不可 URI 编码的符号的屏幕名称时遇到该错误。当我传入这样的空值(光标为空)时,我也得到了它:
https://api.twitter.com/1/followers.json?cursor=&screen_name=whatevah
您能否向我们提供返回此错误的调用的详细信息?
首先很好的问题冉。
我想问你,你有没有通过 Twitter 开发者?
由于 Twitter 提供了两对令牌和库,因此有时使用哪个令牌会变得模棱两可。其中一个是密钥。
您需要选择那些以您的 Twitter ID 开头后跟连字符的令牌。
现在你的问题是这个错误发生在你的一些用户身上。因此,这是应用程序本身在选择令牌时发现模棱两可的答案。
虽然我可能并不完全正确,但我建议您至少尝试一次此解决方案。
这些用户可能没有撤销访问权限。但是根据我的经验,在用户(在测试用例中:我)更改他/她的密码后,访问令牌也可能会过期。
当用户这样做时,您不能再在该用户的范围内使用流 API 的 REST API。请调整您的应用程序以处理这种情况。撤销用户的会话,所以当他回到您的应用程序时,他/她可以再次重定向到 Twitter 以启动新的 OAuth 访问令牌流程。或者给他/她发一封电子邮件,请求重新连接。Vimeo/Windows/... 是一些使用电子邮件处理过期令牌的人。
玩得开心!
您是否确认代币一次有效?在我使用的 OAuth 系统中,令牌的安全存储和检索方式存在错误,导致一小部分令牌损坏。如果您可以确认这些代币在过去有效,那么这是一个很好的第一步。
当您从存储中检索令牌时,它们是否保持不变?他们是否有可能因您管理他们的方式而受到破坏?
放置一些日志记录以跟踪令牌何时工作和失败。令牌失败一次后是否会再次开始工作?如果您在 30 天内未使用令牌,它会过期吗?通过详细的日志,您可以开始识别过期的令牌并查找正在使用的模式以指出可能导致它们过期的原因。
一定要探索其他的可能性。用户如何在 Twitter 中撤销令牌?很容易不小心这样做吗?对于令牌失败的用户,他们是否还有其他已停止工作的授权应用程序?
我的上帝的答案是正确的,但我将分享另一个问题的答案,解释它如何成为您计算机的时钟:
如果您的 OAuth 流程前一天正常工作,第二天失败,请检查您的计算机时钟。我正在运行一个 Vagrant 盒子,它不知何故将其时间设置为前一天,这导致 Twitter API 返回 {"code":89,"message":"Invalid or expired token."}。这也可能显示为 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"
如果您的访问令牌=738629462149844993-FcWHjfcucCLGEosyGGQ38qI******iC,那么不要忘记在您的 USERID 后面加上连字符 (-)。
可能这对你有帮助。我遇到了同样的问题。
请找到下面的代码片段
$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')
));
}
尝试再次重新生成密钥并正确保存它们。
对我来说,这是因为在重新生成其中一个密钥后我没有更新其他密钥。因此再次删除并重新生成了所有 4 个密钥(CONSUMER_KEY、CONSUMER_SECRET、ACCESS_KEY、ACCESS_SECRET)。并尝试再次执行它,这次它成功了。