php - 如何解决 OAuth 1.0 中的 "Invalid signature. Expected signature base string"

标签 php oauth urlencode

我正在尝试使用 OAuth 从站点获取访问 token 和 secret 。请求 token 和请求 secret 的交换正常,但是当需要获取访问 token 时,我收到错误 “无效签名。预期的签名基本字符串。”

有没有人以前见过这个错误或者知道可能出了什么问题?这是我取回的数据(在 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 

最佳答案

如@genesis 所述,获得正确的签名 key 非常痛苦,但有相关文档,可以在此链接上查看 http://oauth.net/core/1.0/#encoding_parameters .

经验法则是当您使用 HMAC-SHA1 时,

  1. 将签名基础字符串生成为“方法(POST/GET/等)”&“你的目标的编码字符串”&“你的 oauth 参数的编码字符串(消费者 key 、随机数、签名方法、时间戳、 token 和版本”
  2. HMAC-SHA1 签名方法使用 client secret 和 token secret 这两个 secret 作为 HMAC-SHA1 算法 key 。为了构造 key ,每个 secret 都经过 UTF8 编码和 URL 编码,并使用“&”字符作为分隔符连接成一个字符串,即使其中一个 secret 为空也是如此。
  3. 将签名基础字符串作为 HMAC-SHA1 文本,并将串联的 secret 作为 key ,客户端生成签名。 HMAC-SHA1 算法将生成一个八位字节字符串作为结果。八位字节字符串必须使用“=”填充进行 base64 编码
  4. 使用“oauth_signature”参数将计算出的签名添加到请求中。当服务器验证签名时,此参数不包含在签名工作流程中,因为它不是客户端签名的签名基础字符串的一部分。当签名包含在 HTTP 请求中时,必须按照用于传输参数的方法的要求对其进行正确编码。

来源:http://nouncer.com/oauth/authentication.html

关于php - 如何解决 OAuth 1.0 中的 "Invalid signature. Expected signature base string",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6766776/

相关文章:

php - CodeIgniter HMVC 如何定义子模块用户(用户登录)

php - 从 magento 表结构获取客户信息

javascript - WordPress AJAX 请求返回 0

python - 您可以使用 Python 从命令行完全验证 Facebook Graph 吗?

html - 如何使用 URL 编码将电子邮件中的文本加粗

iphone - CFURLCreateStringByAddingPercentEscapes,奇怪的行为?

c# - 通过 HttpClient 的 HTTP Post 的 UrlEncode 非字符串属性

php - 为 JSON 多维数组创建表

c# - Twitterizer - GetAccessToken() 时出现异常

ruby - 如何在 Ruby 中使用 OpenID 访问 Google 通讯录