【发布时间】:2011-01-24 02:54:20
【问题描述】:
[来自 OAuth Ruby Google 小组的交叉发布。如果你不能帮助我,别担心]
我正在与TripIt's OAuth API 集成一个项目 并且遇到了一个奇怪的问题。
我验证良好,我存储和检索给定的令牌/秘密 用户没有问题,我什至可以向多个 使用 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%25253E新 %252520York%252C%252520NY%25253C%252Fprimary_location%25253E%25250A %252520%252520%25253C%252Ftrip%25253E%25250A%25253C%252FRequest%25253E %25250A
这对我来说似乎是正确的。
我输出签名(来自同一个文件)并且输出不匹配 lib/client/ 中 Auth 标头的 oauth_signature 参数 net_http.rb。它已在 auth 标头中进行了 URL 编码。这是 正确的?
有人知道宝石是否损坏/是否有修复?我发现很难追踪某些代码。
【问题讨论】:
-
唯一错误的是一些回车。从 Web 复制/粘贴显然不是演示 API 的方法!感谢您的回复!关于丢失的位,我认为 Markdown 可能从我的代码中删除了一些尖括号。无论如何,现在一切正常。
-
为什么你的 xml 三重 url 编码?
标签: ruby authentication rubygems oauth