0

[注: 以下のすべての 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' 

[わかりやすくするために改行を追加しました。実際のコマンドは 1 行です]

他のすべてのデータが有効であると仮定すると、上記のコマンドで「oauth 署名とトークンの検証に失敗しました」と表示されるのはなぜですか (実際のデータを使用している場合でも)。

特に、私の署名「H0KLLecZNAAz%2bXoyrPRiUs37X3Zz%2bAcabMa5M4oDLkM」は無効ですか、それとももっと根本的に間違ったことをしていますか。

これを生成するために使用したプログラム:

#!/ビン/perl
Digest::SHA を使用します。

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

# コメントを外したら、実際のデータをプル
# "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);

# 署名するもの
$url = "GET $str";

# 署名する
$sig = urlencode(Digest::SHA::hmac_sha256_base64($url, "rUOeZMYraAapKmXqYpxNLTOuGNmAQbGFqUEpPRlW&YePiEkSDFdYAOgscijMCazcSfBflykjsEyaaVbuJeO"));

# 署名を含む完全な URL
$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";

サブ URL コード {
  my($str) = @_;
  $str=~s/([^a-zA-Z0-9])/"%".unpack("H2",$1)/iseg;
  $str=~s/ /\+/isg;
  $str を返します。
}

注: これが失敗する理由は他にも考えられますが、現在の問題は、パラメーターを正しく送信しているか、署名を正しく計算しているかということです。

4

1 に答える 1

0

Twitter は、リクエスト トークンに対して POST を実行するよう求めます。

于 2012-08-16T19:26:52.130 に答える