2


2

OAuth署名とトークンの検証に失敗しました

私の制御が及ばない理由で、私はPHP4を使用してtwitterクライアントを作成しています。 リクエストが適切に機能しない-何が悪いのかを見るのに苦労しています。 何か案は?

基本的に何が起こっているのかを説明するために、ここでコードを取得し、非常に単純なスクリプトでそれを叩きました。 セキュリティのためにOAuthキーを非表示にしました。

 $callbackURL,
  'oauth_consumer_key' => $consumerKey,
  'oauth_nonce' => md5(time()),
  'oauth_signature_method' => 'HMAC-SHA1',
  'oauth_timestamp' => time(),
  'oauth_version' => '1.0'
);

ksort($auth_params);

foreach($auth_params as $k=>$v) {
  if ($k == 'oauth_callback') {
    $v = urlencode($v);
  }
  $signature .= urlencode($k) . '%3D' . urlencode($v) . '%26';
}
$signature = substr($signature, 0, strlen($signature) - 3);
$signing_key = $consumerSecret . '&';
$oauth_signature = hmac_sha1($signing_key, $signature);

$auth_params['oauth_signature'] = $oauth_signature;

$auth_string = 'OAuth ';
foreach($auth_params as $k=>$v) {
  $auth_string .= $k . '="' . urlencode($v);
  $auth_string .= ($k == 'oauth_signature') ? '&' : '';
  $auth_string .= '", ';
}
$auth_string = substr($auth_string, 0, strlen($auth_string) - 2);

echo 'Authorization header: ';
echo $auth_string;
echo '

';エコー '
'; echo 'OAuth署名:

';
var_dump($oauth_signature);
echo '

';エコー '
'; //出口; $ curl = curl_init(); curl_setopt($ curl、CURLOPT_URL、$ requestTokenURL); curl_setopt($ curl、CURLOPT_POST、GET); curl_setopt($ curl、CURLOPT_SSL_VERIFYPEER、FALSE); curl_setopt($ curl、CURLOPT_RETURNTRANSFER、true); curl_setopt($ curl、CURLOPT_HTTPHEADER、array( 'Authorization:'。 $ auth_string)); $ response = curl_exec($ curl); curl_close($ curl); var_dump($ response); / * PHP.netの関数-PHP4組み込み関数はありません* / function hmac_sha1($ key、$ data)\ {$ blocksize = 64; $ hashfunc = 'sha1'; if(strlen($ key)> $ blocksize)\ {$ key = pack( 'H *'、$ hashfunc($ key)); } $ key = str_pad($ key、$ blocksize、chr(0x00)); $ ipad = str_repeat(chr(0x36)、$ blocksize); $ opad = str_repeat(chr(0x5c)、$ blocksize); $ hash = pack( 'H *'、$ hashfunc(($ key ^ $ opad).pack( 'H *'、$ hashfunc(($ key ^ $ ipad)。$ data))))); return base64_encode($ hash); }?>

問題は、http://dev.twitter.com/pages/auth#signing-requestsの値を使用してこのスクリプトを実行しようとしたことです。署名と認証文字列はまったく同じでしたが、CURLで実行しようとすると(まったく同じコードを使用して)私自身の値は、「oauth署名とトークンの検証に失敗しました」というかなり非記述的な情報を提供する

1 Answer


4


信じられない-この質問を投稿してから1〜2秒で見つけた。 実際、2つの問題がありました。

1)開発サーバーの時間が適切に設定されていません。 しかし、これを正しく設定した後、まだ機能しませんでした。 2)curl_setopt($ curl、CURLOPT_POST、true)を設定した後、すべてが魔法のように機能しました。 やあ!