[从 OAuth Ruby Google Group 交叉发布。如果你帮不了我,别担心]
我正在将项目与 TripIt's OAuth API 集成 我遇到了一个奇怪的问题。
我验证良好,我存储和检索给定的 token / secret 用户没问题,我什至可以向多个用户发出 GET 请求 使用 gem 的服务。但是当我尝试使用我需要的一项服务时 POST,我收到 401“无效签名”响应。
也许我不明白如何将数据传递给 AccessToken 的 post 方法,所以这是我的代码示例:
xml = <<-XML
<Request>
<Trip>
<start_date>2008-12-09</start_date>
<end_date>2008-12-27</end_date>
<primary_location>New York, NY</primary_location>
</Trip>
</Request>
XML`
response = access_token.post('/v1/create', {:xml => xml},
{'Content-Type' => 'application/x-www-form-urlencoded'})
我已经尝试过使用和不使用事先转义 xml 字符串。 TripIt 的人似乎认为 xml 参数可能不是 包含在 signature_base_string 中,但是当我输出它时 (来自 lib/signature/base.rb)我看到:
POST&https%3A%2F%2Fapi.tripit.com%2Fv1%2Fcreate&oauth_consumer_key %3D%26oauth_nonce %3Djs73Y9caeuffpmPVc6lqxhlFN3Qpj7OhLcfBTYv8Ww%26oauth_signature_method %3DHMAC-SHA1%26oauth_timestamp%3D1252011612%26oauth_token %3D%26oauth_version%3D1.0%26xml%3D%25253CRequest%25253E %25250A%252520%252520%25253CTrip%25253E%25250A %252520%252520%252520%252520%25253Cstart_date%25253E2008-12-09%25253C %252Fstart_date%25253E%25250A %252520%252520%252520%252520%25253Cend_date%25253E2008-12-27%25253C %252Fend_date%25253E%25250A %252520%252520%252520%252520%25253Cprimary_location%25253ENew %252520York%252C%252520NY%25253C%252Fprimary_location%25253E%25250A %252520%252520%25253C%252FTrip%25253E%25250A%25253C%252FRequest%25253E %25250A
这对我来说似乎是正确的。
我输出签名(来自同一个文件)但输出不匹配 lib/client/中 Auth header 的 oauth_signature 参数 net_http.rb。它已在身份验证 header 中进行了 URL 编码。这是 正确的?
有人知道 gem 是否坏了/是否有修复的地方?我发现很难追踪某些代码。
最佳答案
您的 oauth_token 为空。不熟悉协议(protocol),可以吗?
包含正确的 token 后,还请记住在签名中使用 token_secret。
关于ruby - 使用 Ruby OAuth Gem 将 XML 发布到 OAuth 和签名无效的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1381010/