3

我有一个 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 帖子正常工作?

4

4 回答 4

2

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

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

于 2011-05-17T07:51:09.887 回答
1

我刚刚转储了我的应用程序在将照片条目发布到 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参数发布照片。

于 2011-02-01T11:55:07.207 回答
0

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

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

于 2012-12-02T17:52:37.183 回答
0

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

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

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

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

于 2011-08-21T20:54:57.060 回答