如何解决OAuth 1.0中的“无效签名。预期签名基本字符串”

时间:2011-07-20 18:37:13

标签: php oauth urlencode

我尝试使用OAuth从网站获取访问令牌和密码。请求令牌和请求密钥的交换正常,但是当获得访问令牌时,我收到错误"Invalid signature. Expected signature base string."

之前有没有人看过这个错误或者知道可能出现什么问题?这是我要回来的数据(在urldecode之后):

Invalid signature. Expected signature base string: POST 
https://www.readability.com/api/rest/v1/oauth/access_token 
oauth_consumer_key=my_consumer_key 
oauth_nonce=d9aff6a0011a633253c5ff9613c6833d79d52cbe 
oauth_signature_method=HMAC-SHA1 
oauth_timestamp=1311186899 
oauth_token=C8GF7D6ytPzQKdZVpy 
oauth_verifier=ncUV4tJSrS 
oauth_version=1.0 
signature=7jUuk6fsEL8XNYxVWcsfGXEreK0%3D 

5 个答案:

答案 0 :(得分:2)

你可以看看here,有人问过一周前。回复:

  

完全正确地获取OAuth签名内容总是一件巨大的痛苦。您应该尽力确保库生成的基本字符串就像服务器所期望的那样。一旦这是真的,你可以搞砸的唯一方法是使用错误的密钥进行hmac。

答案 1 :(得分:1)

正如@genesis描述的那样,获得正确的签名密钥非常痛苦,但是有相关的文档,可以在此链接http://oauth.net/core/1.0/#encoding_parameters上看到。

拇指规则是指使用HMAC-SHA1,

  1. 将签名基本字符串生成为“Method(POST / GET / etc)”&“encoded-string-for-your-target”&“encoded-string-of-your-oauth-param(consumer key,nonce) ,签名方法,时间戳,令牌和版本“
  2. HMAC-SHA1签名方法使用两个秘密客户端密钥和令牌密钥作为HMAC-SHA1算法密钥。为了构造密钥,每个秘密都是UTF8编码的,URL编码的,并使用'&'连接成一个字符串。即使任何一个秘密为空,也要将字符作为分隔符。
  3. 使用签名基本字符串作为HMAC-SHA1文本并将连接的秘密作为密钥,客户端生成签名。 HMAC-SHA1算法将生成八位字符串作为结果。八位字节字符串必须使用'='padding
  4. 进行base64编码
  5. 使用'oauth_signature'参数将计算出的签名添加到请求中。当服务器验证签名时,此参数不包含在签名工作流中,因为它不是客户端签名的签名基本字符串的一部分。当签名包含在HTTP请求中时,必须根据用于传输参数的方法对其进行正确编码。
  6. 来源:http://nouncer.com/oauth/authentication.html

答案 2 :(得分:0)

由于某些原因我无法对答案发表评论,但要在上面的答案评论中回答你的问题,你可以使用Oauth游乐场来查看google想要你的基本字符串的样子。 http://googlecodesamples.com/oauth_playground/index.php

答案 3 :(得分:0)

我知道这真的很老了,这可能没有丝毫帮助,但我今天得到了一些东西,而rawurlencode()而不是urlencode()为我修复了它。

答案 4 :(得分:-1)

我最近在搜索谷歌后遇到了一个问题1.0我找到了一个由某人创建的网络服务,该服务为oauth生成签名。它对我有用。链接是here。看看:)