2

我正在为 iPad 开发一个使用 OAuth1.0a 的应用程序。

我的问题是我无法为我的 request_token 请求获得正确的签名。我要连接的服务有一个调试工具,可以根据您的 OAuth 参数检查您应该拥有的签名。

结果是:

  • 我得到了正确的签名基本代码

  • 我得到不同的签名

根据我对 OAuth 的理解,这意味着:

  • 我的签名算法被窃听(HMAC-SHA1)(但我从第 3 方得到它:https ://github.com/jdg/oauthconsumer/tree/master/Crytpo/ )

  • 服务商错了

是否有任何免费工具(可能是在线工具)可以从签名基本代码和密钥构建签名以检查谁对谁错?

谢谢你的帮助

4

3 回答 3

1

为什么不只使用所有OAuthConsumer而不是只使用 HMAC-SHA1 组件?它在许多不同的应用程序中使用得很好,经过良好测试的代码。我会说这OAuthConsumer是“众所周知的好”。

您的服务提供商似乎不太可能出错(除非您是唯一的客户)。

这留下了您使用加密代码的方式。

我在 OAuth 签名中看到的常见问题:

  • 不对参数进行排序
  • 遗漏了看似不重要的参数
  • 不将参数与基本 URL 分开
  • 使用错误的 HTTP 方法
  • 重定向或别名。您连接到 server.com,但远程端认为自己是 api.server.com

您可以做的另一件事是使用相同的客户端代码连接另一个 OAuth 服务,例如 Twitter。如果您的代码可靠地为 Twitter 生成正确的签名,那么它很可能会为任何其他服务做正确的事情。正如您所建议的,这(可能)意味着问题出在您的服务上。我说“可能”,因为每个 OAuth 实现似乎都有自己的怪癖。

于 2010-11-18T14:04:56.303 回答
0

这不太可能是问题,但请尝试使用 iOS 内置的 HMAC 方法来生成您的 SHA:

http://developer.apple.com/library/ios/#documentation/System/Conceptual/ManPages_iPhoneOS/man3/CCHmac.3cc.html

更有可能的是您的签名基本字符串实际上是错误的。您是否确认您的基本字符串符合规范?您可以使用一个很好的交互式工具在此处检查您的请求:

http://hueniverse.com/2008/10/beginners-guide-to-oauth-part-iv-signing-requests/

于 2010-11-18T09:36:06.817 回答
0

我已经弄清楚我的问题是什么,我的消费者密钥包含特殊字符('+' 和 '='),并且使用这些字符,来自我的提供者和来自 OAuth iOS 框架的签名是不同的。

我试图查看 RFC 以试图确定谁是对的,但无法做出决定。因此,我将尝试破解 OAuth 代码以使其与我的提供商一起使用。一旦我找到它,我会在这个页面上分享这个技巧。

所以请注意,特殊字符编码可能很棘手,如果您对如何编码特殊字符以签署您的签名库有意见,请随时分享。

于 2011-01-21T10:22:25.090 回答