PHP Oauth构建签名密钥?

PHP Oauth构建签名密钥?,php,oauth,Php,Oauth,我正在尝试构建一个有效的签名密钥(我使用的是HMAC-SHA1方法),但到目前为止这仍然无效(我使用的在线测试服务器位于): 由于这是对未授权令牌的请求,$token\u secret字符串为空。 返回的签名如下所示: POST&http://term.ie/oauth/example/request_token.php&oauth_consumer_key%3Dkey%26oauth_nonce%3D0uPOn3pPUbPlzWx2cO6citRPafIni5%26oauth_

我正在尝试构建一个有效的签名密钥(我使用的是HMAC-SHA1方法),但到目前为止这仍然无效(我使用的在线测试服务器位于):

由于这是对未授权令牌的请求,$token\u 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
$key看起来是这样的:
secret&


密钥/机密都是正确的,我收到服务器的响应,说“无效签名”。我是否以正确的方式构建它?

我正在使用的实现中的方法

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

如果有帮助的话…

我建议先在自己的步骤中分离创建签名基字符串的逻辑,这样您就可以使用一些测试页面,例如在创建签名之前验证您的基字符串是否正确。感谢链接。NetFlix Oauth服务器也报告了一个无效的签名,因此我认为可以安全地得出结论,我的签名有问题。感谢您提供的代码片段。不过,使用哪一个并不重要,因为$key只包含“secret&”,所以它不是RFC3986编码问题。也许只是服务器搞乱了我。
 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 '';
  }