我不太熟悉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的应用程序(客户端)是否需要知道访问令牌的秘密才能正常工作?秘密是一种公共信息(我猜不是,所以这个名字)。我在这里做错什么了?
发布于 2012-02-01 13:20:42
是的他们有。
访问令牌秘密(以及使用者秘密)用于在随后的访问受保护资源的请求中对客户端的签名基字符串进行签名,其方式与验证签名时在服务器端完成的方式相同。
OAuth 1.0规范还规定,在生成访问令牌时,OAuth提供程序必须返回访问令牌秘密,参见规范第6.3.2节。
https://stackoverflow.com/questions/9096354
复制相似问题