Nicht überprüft werden konnte oauth-Signatur und token

Gründen, die außerhalb meiner Kontrolle ich bin mit PHP4 zu schreiben, ein twitter-client. Anfragen funktionieren nicht richtig - ich bin eine harte Zeit zu sehen, was falsch ist. Irgendwelche Ideen?

Ich packte Sie den code und knallte es in einem sehr einfachen Skript hier zur Veranschaulichung im wesentlichen, was Los ist. Ich habe versteckte OAuth-Schlüssel für security-Zwecke.

<?php

$requestTokenURL = 'https://api.twitter.com/oauth/request_token';
$consumerKey    = 'fLxA6J1111111111PnvVOg';
$consumerSecret = 'H5QxDHAOHn1111111111111Ozet1HRTtVAV1FM3oYk';
$callbackURL = 'http://www.example.com';
$signature = 'POST&' . urlencode($requestTokenURL) . '&';

$auth_params = array(
  'oauth_callback' => $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: <pre>';
echo $auth_string;
echo '</pre>';
echo '<br /><br />';
echo 'OAuth Signature: <pre>';
var_dump($oauth_signature);
echo '</pre>';
echo '<br /><br />';
//exit;

$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);

/* function from PHP.net - no PHP4 built-in function */
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);
}
?>

die Sache ist die, ich habe versucht mit diesem script mit den Werten aus http://dev.twitter.com/pages/auth#signing-requests und die Signatur und der Autorisierung string waren genau die gleichen - aber wenn ich versuche, ausgeführt mit CURL mit meiner eigenen Werte (über die exacty gleichen code) es gibt nur mich, die eher non-descript "Fehler beim validieren oauth-Signatur und-token"

InformationsquelleAutor oauthor | 2010-09-06
Schreibe einen Kommentar