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