Tumblr OAuth图片文章给我401 /“无效的OAuth凭证”

我有一个iOS应用程序发布图像到几个服务,包括Twitter和我试图扩大对tumblr的支持。 我已经调整了OAuth 1.0a标题逻辑的一些开源代码,并且它的工作方式足以成功地用于twitter + twitpic和tumblr的身份validation。 但是,图片发布到tumblr的状态为401,string响应“无效的OAuth凭证”

为了简化,我唯一的多部分部分是posttypes和图像数据。

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

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标题是(再次,linebreaks添加在这里为了可读性):

 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-- 

任何人都可以告诉我,如果我的签名基础string或身份validation标题做错了什么,或者如果有一些窍门让tumblr oauth职位工作?

与我在Silverlight中的OAuth实现完全相同的问题 – 我已经实现了API的其余部分没有问题,如果您不使用OAuth并发送电子邮件/密docker,此方法也可以工作。

Arvin的post只是向我展示了这个问题,他在OAuth中包含了其他非文件字段。 我只是对我的文章做了同样的事情,所以他们是在多部分forms的身体,但也被添加到OAuth信号 – 现在我上传照片post没有问题!

我只是把我的应用程序在向Tumblr发布照片条目时生成的基本string进行转储。 Linebreaks被添加来减less模糊。 希望能帮助到你。

 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,你将使用types参数发布照片。

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

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

此外,我正在使用他们的https://www.tumblr.com/oauth/access_token url xAuth的东西。

我希望这有帮助。 我在devise的gem上的Rails。

有相同的问题:似乎我使用的OAuth库(GTM OAuth)没有使用签名的POST数据字段。 在将字段types标题另外添加为查询string之后,OAuth库使用了它们,并且我能够上传照片/文章/任何内容。

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