PHP Oauth строит ключ подписи? - PullRequest
0 голосов
/ 26 февраля 2011

Я пытаюсь создать действительный ключ подписи (я использую метод HMAC-SHA1), но пока он недействителен (я использую тестовый сервер онлайн на http://term.ie/oauth/example/client.php):

    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&

Все ключи / секреты верны, и я получаю ответ от сервера, говорящий «недопустимая подпись». Я строю это правильно?

1 Ответ

1 голос
/ 26 февраля 2011

Метод из реализации, которую я использую ....

 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 '';
  }

Если это вообще поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...