【问题标题】:Tumblr OAuth image post gives me 401/"Invalid OAuth credentials"Tumblr OAuth 图片帖子给了我 401/“无效的 OAuth 凭据”
【发布时间】:2011-06-18 12:01:25
【问题描述】:

我有一个 iOS 应用程序,它可以将图像发布到多个服务,包括 twitter,我正在尝试将这种支持扩展到 tumblr。我已经为 OAuth 1.0a 标头逻辑调整了一些开源代码,它运行良好,足以成功用于 twitter + twitpic 和 tumblr 的身份验证。但是,在 tumblr 上发布的图片失败,状态为 401,字符串响应“OAuth 凭据无效”

为简化起见,我唯一的多部分部分是帖子类型和图像数据。

所以我的简单 POST 是到 http://www.tumblr.com/api/write,签名基本字符串是(大致上,因为我已经编辑了我的消费者密钥和令牌,并添加了换行符以提高可读性):

POST&http%3A%2F%2Fwww.tumblr.com%2Fapi%2Fwrite&
oauth_consumer_key%3Dxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%26
oauth_nonce%3D71edd7a1224463a7e1723bb7b568060b4d69deb6%26
oauth_signature_method%3DHMAC-SHA1%26
oauth_timestamp%3D1297678418%26
oauth_token%3Dxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%26
oauth_version%3D1.0%26
type%3Dphoto

我的 oauth 标头是(再次,为了便于阅读,此处添加了换行符):

Authorization: OAuth realm="http://www.tumblr.com/",
oauth_consumer_key="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
oauth_signature_method="HMAC-SHA1",
oauth_timestamp="1296445530",
oauth_nonce="71edd7a1224463a7e1723bb7b568060b4d69deb6",
oauth_version="1.0",
oauth_token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
oauth_signature="fWuli4eO3qVehfdeFzZN%2FDNYpFk%3D"

我添加的唯一其他标头是 Content-Type (multipart/form-data) 和 Content-Length,消息正文只是:

--my_sorta_unique_boundary_string
Content-Disposition: form-data; name="type"

photo
--my_sorta_unique_boundary_string
Content-Disposition: form-data; name="data"
Content-Type: image/jpg
Content-Transfer-Encoding: binary

... (image data) ...
--my_sorta_unique_boundary_string--

谁能告诉我我的签名基本字符串或身份验证标头是否有问题,或者是否有一些技巧可以让 tumblr oauth 帖子正常工作?

【问题讨论】:

    标签: iphone ios oauth tumblr


    【解决方案1】:

    遇到了同样的问题:我使用的 OAuth 库 (GTM OAuth) 似乎没有使用 POST Data 字段进行签名。在我添加字段 typecaption 作为查询字符串后,OAuth 库使用它们,我能够上传照片/帖子/任何内容。

    似乎每个帖子正文字段(二进制数据除外)都需要成为 OAuth 签名的一部分。

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题。这是因为我的 Tumblr 秘密包含了一个空白。

      这是你得到它的地方: http://www.tumblr.com/oauth/apps -> "显示密钥"

      另外,我正在使用带有 https://www.tumblr.com/oauth/access_token 网址的 xAuth 东西。

      我希望这会有所帮助。我正在使用 Devise gem 在 Rails 上。

      【讨论】:

        【解决方案3】:

        我在 Silverlight 中的 OAuth 实现也遇到了完全相同的问题 - 我已经毫无问题地实现了 API 的其余部分,如果您不使用 OAuth 并且只发送电子邮件/密码标头,则此方法有效。

        Arvin 的帖子只是向我展示了这个问题,他在他的 OAuth 中包含了其他非文件字段。我只是对我的帖子做了同样的事情,所以它们在多部分表单正文中,但也被添加到 OAuth sig - 现在我上传照片帖子没有问题!

        【讨论】:

          【解决方案4】:

          我刚刚转储了我的应用在将照片条目发布到 Tumblr 时生成的基本字符串。添加换行符以减少晦涩难懂。希望对您有所帮助。

          POST&http%3A%2F%2Fwww.tumblr.com%2Fapi%2Fwrite&
          caption%3D%253Cp%253Etesting%253C%252Fp%253E%26
          click-through-url%3D%26
          format%3Dhtml%26
          generator%3D%253C%2520href%253D%2522http%253A%252F%252Fsudocode.net%252Fprojects%252Fpicasa-2-tumblr%2522%253EPicasa2Tumblr%253C%252Fa%253E%26
          group%3Darvn.tumblr.com%26
          oauth_consumer_key%3Dxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%26
          oauth_nonce%3Db0f187f5d0781b3d6aea0f192e116524%26
          oauth_signature_method%3DHMAC-SHA1%26
          oauth_timestamp%3D1296560370%26
          oauth_token%3DwkR9Jjtnp0tMPHp3aqcxvRd401cUeVX7PzxUrc0Y8SZZRoLHgs%26
          oauth_version%3D1.0%26
          private%3D0%26
          slug%3D%26
          state%3Ddraft%26
          tags%3D%26
          type%3Dphoto
          

          有一件事,你没有通知 Tumblr 你将使用 type 参数发布照片。

          【讨论】:

          • 谢谢,我添加了类型参数,但仍然失败(编辑我的问题是这样说的)。我想知道我缺少的某些参数是否实际上是必需的,并且以某种方式将其报告为 oauth 失败。不过问题是:您的 Authorization 标头是否仅包含像我的一样的 oauth 参数(其他参数作为表单数据部分给出)?
          猜你喜欢
          • 1970-01-01
          • 2011-12-12
          • 1970-01-01
          • 2011-02-06
          • 2017-08-31
          • 2012-02-19
          • 2013-06-25
          • 2014-02-19
          • 2014-05-05
          相关资源
          最近更新 更多