OAuth签名生成(PHP)

时间:2012-02-01 13:09:46

标签: php oauth drupal-7

我对OAuth流程和/或编码不太熟悉,但我设法让我的网站(有点)作为OAuth提供商工作。

我说某种程度上,因为很长一段时间我在使用访问令牌获取受保护信息时遇到“无效签名”错误(我成功获得了一个请求令牌,授权它和得到了访问令牌。

所以我看了一下签名生成方法(我使用的是Drupal 7和一些未记录的模块)。代码是:

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 : "" // the token object has a key and a secret property
  );

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

  return base64_encode(hash_hmac($this->algo, $base_string, $key, TRUE));
}

所以这是使用$token秘密为请求生成签名(加上$base_string并不重要。)

所以我猜我的问题确实是:使用我的OAuth的应用程序(客户端)是否需要知道访问令牌秘密才能正常工作?秘密是一个公共信息(我不猜,因此这个名字)。我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

是的,他们这样做。

访问令牌密钥(以及使用者密钥)用于在后续访问受保护资源的请求中在客户端签名签名基本字符串,与签名时在服务器端完成的方式相同验证。

OAuth 1.0规范还声明OAuth提供商必须在生成访问令牌时返回访问令牌密码,请参阅section 6.3.2 of the specs