2011-02-26 6 views
0

私は、有効な署名鍵を(私はHMAC-SHA1方式を使用しています)を構築しようとしている、これまでのところ、これはまだ無効である(私はhttp://term.ie/oauth/example/client.phpでのオンラインテストサーバーを使用しています):PHP Oauthが署名キーを作成していますか?

function _build_signature_hmac($base_url, $params, $consumer_key, $token_secret = '') 
    { 
     // Setup base-signature data 
     $data = 'POST&' . $base_url . '&'; 

     // Sort the params array keys first 
     ksort($params); 

     // Attach params string 
     $data .= rawurlencode(http_build_query($params)); 

     // Build the signature key 
     $key = rawurlencode($consumer_key) . '&' . rawurlencode($token_secret); 

     return base64_encode(hash_hmac('sha1', $data, $key)); 
    } 

これは不正なトークンの要求なので、$ token_secret文字列は空です。 返された署名は次のようになります。

POST&http://term.ie/oauth/example/request_token.php&oauth_consumer_key%3Dkey%26oauth_nonce%3D0uPOn3pPUbPlzWx2cO6citRPafIni5%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1298745681%26oauth_version%3D1.0 

そして$キーは次のようになります。secret&

鍵/秘密はすべて正しいと私は「は無効な署名」を言って、サーバからの応答を取得しています。私は正しい方法でそれを構築していますか?

+0

私は、最初にそれ自身のステップで署名ベース文字列を作成するためのロジックをseperatingお勧めそのため、http://developer.netflix.com/resources/OAuthTestなどのテストページを使用して、署名作成に入る前に基本文字列が正しいかどうかを確認することができます。 –

+0

リンクをありがとう。 NetFlix Oauthサーバーは無効な署名も報告するので、私の署名が何か間違っていると判断するのは安全だと思います。 –

答えて

1

私が使用しています実装から方法....

public function build_signature($request, $consumer, $token) { 
    $base_string = $request->get_signature_base_string(); 
    $request->base_string = $base_string; 

    $key_parts = array(
     $consumer->secret, 
     ($token) ? $token->secret : "" 
    ); 

    $key_parts = OAuthUtil::urlencode_rfc3986($key_parts); 
    $key = implode('&', $key_parts); 

    return base64_encode(hash_hmac('sha1', $base_string, $key, true)); 
    } 



public static function urlencode_rfc3986($input) { 
    if (is_array($input)) { 
    return array_map(array('OAuthUtil', 'urlencode_rfc3986'), $input); 
    } else if (is_scalar($input)) { 
    return str_replace(
     '+', 
     ' ', 
     str_replace('%7E', '~', rawurlencode($input)) 
    ); 
    } else { 
    return ''; 
    } 

それがすべてで助けている場合 ...

+0

コードスニペットありがとうございます。 $キーはちょうど「秘密」で構成されているので、私はどちらを使うかは関係ありません。したがって、RFC3986エンコーディングの問題ではありません。たぶんそれはちょうど私と一緒に乱れているサーバーです。 –

関連する問題