2017-08-21 12 views
1

プログラムでOAuth署名を生成できません。 私はFreeBSD上でPHP71を使用しており、PHP> 5.6では動作しないため、PECL拡張は使用できません。OAuth:無効なoauth_signature

私はRFCと多くの多くのSOスレッドだけでなく、私が持っているのと同じ問題を抱えるブログを読んだ。 しかし私はどこで失敗したのか分かりません。

XING.com Apiからリクエストトークンを取得しようとしています。

マイコード:

$strConsumerKey = '12345'; 
$strConsumerSecret = '1234567890'; 

$arrQueryParams = [ 

    'oauth_callback'   => 'http://xing.dev/endpoint?hauth.done=XING', 
    'oauth_consumer_key'  => $strConsumerKey, 
    'oauth_nonce'   => md5(microtime() . mt_rand()), 
    'oauth_signature_method' => 'HMAC-SHA1', 
    'oauth_timestamp'  => time(), 
    'oauth_version'   => '1.0' 

]; 

uksort($arrQueryParams, 'strcmp'); 

$strNormalizedParams = []; 

foreach($arrQueryParams AS $k => $v) 
    $strNormalizedParams[] = $k . '=' . $v; 

$strRequestTokenUrl = 'https://api.xing.com/v1/request_token'; 
$strBaseString  = 'GET&' . rawurlencode($strRequestTokenUrl) . '&' . rawurlencode(implode('&', $strNormalizedParams)); 

$strKey = rawurlencode($strConsumerSecret) . '&';# . rawurlencode($strConsumerKey); 

$strOAuthSignature = base64_encode(hash_hmac('sha1', $strBaseString, $strKey, true)); 

$arrQueryParams['oauth_signature'] = $strOAuthSignature; 
uksort($arrQueryParams, 'strcmp'); 

$params = []; 

foreach($arrQueryParams AS $k => $v) 
    $params[] = $k . '=' . rawurlencode($v); 

$strFinalRequest = $strRequestTokenUrl . '?' . implode('&', $params); 

$ch = curl_init($strFinalRequest); 

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

$mixResponse = curl_exec($ch); 

var_dump($mixResponse); 

curl_close($ch); 

exit; 
  • 私は$ strKeyを作成するすべての組み合わせを試してみましたが、私は、現在を考えるGET/POSTリクエスト(APIドキュメントの両方が可能であると言う)
  • として、それを試してみました私は私のシステム時刻を確認し、正しい1
  • があり、私が試した異なるタイムゾーン

$ strBaseString例:

GET & HTTPS%3A%2F%2Fapi.xing.com%2Fv1%2Frequest_token & oauth_callback%3Dhttp%3A%2F%2Fxing.dev%2Fendpoint%3Fhauth.done%3DXING%26oauth_consumer_key%3D12345%26oauth_nonce% 3Daadab05f87028514358e5995dc6728fd%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1503318691%26oauth_version%3D1.0

最終リクエスト例:

https://api.xing.com/v1/request_token?oauth_callback=http%3A%2F%2Fxing.dev%2Fendpoint%3Fhauth.done%3DXING&oauth_consumer_key=12345&oauth_nonce=71f83f72b929a87e5fdd6bf1a7fb2511&oauth_signature=56qc3%252FCrMptnUoy6TgsJtsZclfY%253D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1503318773&oauth_version=1.0

応答が常にある:

{"message":"Invalid OAuth signature","error_name":"INVALID_OAUTH_SIGNATURE"} 

本当面白いと思うがhttps://github.com/xing/xing-api-samples/tree/master/php XINGクライアントは、私のマシン上で動作すること、しかしです。私はコードをデバッグし、どのように署名を生成しているのか、生成された基本文字列、最終文字列、パラメータなどをダンプしてみました。

(もちろんoauth_timestampとoauth_nonceの値を除く)また、私はOAuthの例で結果を再現することができます: https://oauth.net/core/1.0/#sig_base_example

これは、それがさらに奇妙なことができます。

誰かが私が間違っていることを考えていますか? はありがとうとよろしく間違いが見つかり

答えて

1

$strBaseString = 'GET&' . rawurlencode($strRequestTokenUrl) . '&' . rawurlencode(implode('&', $strNormalizedParams)); 

$strBaseString = 'GET&' . rawurlencode($strRequestTokenUrl) . '&' . rawurlencode(http_build_query($arrQueryParams)); 
する必要があります
関連する問題