当前位置: 首页 > 知识库问答 >
问题:

为什么这个twitter oauth API令牌请求失败

华良平
2023-03-14

[注意:以下所有oauth代币/秘密都是随机创建的;它们不是我的实际代币/秘密]

 
curl -o /tmp/test.txt 'https://api.twitter.com/oauth/request_token?
oauth_timestamp=1345141469&
consumer_key=UEIUyoBjBRomdvrVcUTn&oauth_access_token_secret=YePiEkSDFdYAOgscijMCazcSfBflykjsEyaaVbuJeO&oauth_access_token=47849378%2drZlzmwutYqGypbLsQUoZUsGdDkVVRkjkOkSfikNZC&oauth_nonce=1345141469&
consumer_secret=rUOeZMYraAapKmXqYpxNLTOuGNmAQbGFqUEpPRlW&
oauth_version=1%2e0&
oauth_signature_method=HMAC%2dSHA1&oauth_signature=H0KLLecZNAAz%2bXoyrPRiUs37X3Zz%2bAcabMa5M4oDLkM' 

[为了清晰起见,我添加了换行符;实际命令只有一行]

假设所有其他数据都是有效的,为什么上面的命令会产生“无法验证oauth签名和令牌”(即使在使用真实数据时)?

特别是,我的签名“H0KLLecZNAAz+XyrPRiUs37X3Zz+AcabMa5M4oDLkM”是无效的,还是我做了一些更根本的错误。

我用来生成这个的程序:


#!/bin/perl 
use Digest::SHA; 

%twitter_auth_hash = ( 
"oauth_access_token" => "47849378-rZlzmwutYqGypbLsQUoZUsGdDkVVRkjkOkSfikNZC", 
"oauth_access_token_secret" => "YePiEkSDFdYAOgscijMCazcSfBflykjsEyaaVbuJeO", 
"consumer_key" => "UEIUyoBjBRomdvrVcUTn", 
"consumer_secret" => "rUOeZMYraAapKmXqYpxNLTOuGNmAQbGFqUEpPRlW" 
); 

# if uncommented, pull my actual data 
# require "bc-private.pl"; 

$twitter_auth_hash{"oauth_signature_method"} = "HMAC-SHA1"; 
$twitter_auth_hash{"oauth_version"} = "1.0"; 
$twitter_auth_hash{"oauth_timestamp"} = time(); 
$twitter_auth_hash{"oauth_nonce"} = time(); 

for $i (keys %twitter_auth_hash) { 
  push(@str,"$i=".urlencode($twitter_auth_hash{$i})); 
} 

$str = join("&",@str); 

# thing to sign 
$url = "GET $str"; 

# signing it 
$sig = urlencode(Digest::SHA::hmac_sha256_base64($url, "rUOeZMYraAapKmXqYpxNLTOuGNmAQbGFqUEpPRlW&YePiEkSDFdYAOgscijMCazcSfBflykjsEyaaVbuJeO")); 

# full URL incl sig 
$furl = "https://api.twitter.com/oauth/request_token?$str&oauth_signature=$sig"; 
# system("curl -o /tmp/testing.txt '$furl'"); 


print "FURL: $furl\n"; 
print "STR: $str\n"; 
print "SIG: $sig\n"; 

sub urlencode { 
  my($str) = @_; 
  $str=~s/([^a-zA-Z0-9])/"%".unpack("H2",$1)/iseg; 
  $str=~s/ /\+/isg; 
  return $str; 
} 

注意:我意识到这失败还有很多其他可能的原因,但当前的问题是:我是否正确发送了参数,是否正确计算了签名。

共有1个答案

颛孙镜
2023-03-14

Twitter要求您发布请求令牌。

 类似资料:
  • 我正在使用凭据和预检请求实现CORS,我有点困惑为什么预检请求在Firefox 30中始终失败,但在Safari(7.0.2)和Chrome35中有效。我认为这个问题不同于“为什么经过身份验证的CORS请求的预检OPTIONS请求在Chrome而不是Firefox中有效?”因为我没有收到401,而是来自浏览器客户端的特定CORS消息: “跨源请求已阻止:同源策略不允许读取 http://myurl

  • 在过去的几天里,我一直在玩弄twitter应用编程接口,但似乎无法请求“请求令牌”。(流程A) 在twitterapi上,我应该达到以下终点(https://api.twitter.com/oauth/request_token)如果请求成功,则应向我提供一个,和)(应与我通过的匹配)。我试图只使用我的私钥,但这当然是失败的。我对如何生成此请求的理解是否错误? 我相信我的问题是如何生成。阅读twi

  • 嗨,我正在使用本教程 对于我的twitter测试项目,我已经更改了: 从 =new DefaultOAuthProvider("http://twitter.com/oauth/request_token","http://twitter.com/oauth/access_token","http://twitter.com/oauth/authorize"); 到 =new DefaultOAu

  • 我将Django JWT与DRF一起使用,将Vue Js与Axios一起使用。当用户登录时,我检索并将令牌存储在本地存储器中,我已验证该令牌可以正常工作。然后我重定向到一个新页面,在那里我提出另一个请求以获取数据。每次我重定向到这个页面,我得到一个401未授权,当我刷新页面,它工作良好。在发出第二个请求之前,我检查了是否存储了令牌。我尝试在创建的钩子中获取重定向页面上的数据。我还创建了一个axio

  • 我正在尝试从应用程序服务中获取Google的刷新令牌,但我不能。 日志说 2016-11-04T00:04:25 PID[500]收到的详细请求:获取https://noteappsvr.azurewebsites.net/.auth/login/google?access _ type = offline 2016-11-04t 00:04:25 PID[500]从https://account

  • 问题内容: 以下函数给出验证错误而不是令牌: 无法验证oAuth签名和令牌 问题答案: 以下是到目前为止我整理的内容,它有效:-)