Пост Tumblr OAuth с изображением дает мне 401 / «Недействительные учетные данные OAuth» - PullRequest
3 голосов
/ 31 января 2011

У меня есть приложение для iOS, которое публикует изображения в нескольких сервисах, включая твиттер, и я пытаюсь расширить эту поддержку до Tumblr.Я адаптировал некоторый открытый исходный код для логики заголовка OAuth 1.0a, и он работает достаточно хорошо, чтобы быть успешным для твиттера + twitpic и для аутентификации tumblr.Однако публикации изображений в Tumblr не выполняются со статусом 401 и строковым ответом «Неверные учетные данные OAuth»

Для упрощения, единственными разделами, состоящими из нескольких частей, являются тип записей и данные изображений.

Так что мой простой POSThttp://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--

Может кто-нибудь сказать мне, если я что-то не так сделал с моей базовой строкой подписи или заголовком auth, или есть какой-то трюк для того, чтобы заставить работать сообщения tumblr oauth?

Ответы [ 4 ]

2 голосов
/ 17 мая 2011

У меня точно такая же проблема с моей реализацией OAuth в Silverlight - я реализовал остальную часть API без проблем, и этот метод работает, если вы не используете OAuth и просто отправляете заголовки электронной почты / пароля также.

Пост Арвина только что показал мне проблему, хотя он включает другие не-файловые поля в свой OAuth. Я просто сделал то же самое с моим сообщением, чтобы они были в форме многокомпонентной формы, но также были добавлены в сигнатуру OAuth - и теперь я загружаю фотографии без проблем!

1 голос
/ 01 февраля 2011

Я только что сделал дамп базовой строки, которую генерирует мое приложение, когда публикует запись с фотографией в 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 .

0 голосов
/ 02 декабря 2012

Была такая же проблема: похоже, что библиотека OAuth, которую я использовал (GTM OAuth), не использовала поля POST Data для подписи. После того как я добавил поля type и caption дополнительно в виде строки запроса, библиотека OAuth использовала их, и я смог загрузить фотографию / публикацию / что угодно.

Похоже, что каждое поле post body (кроме двоичных данных) должно быть частью подписи OAuth.

0 голосов
/ 22 августа 2011

У меня была такая же проблема.Это потому, что я включил пустой секрет Tumblr.

Вот где вы его получите: http://www.tumblr.com/oauth/apps -> «Показать секретный ключ»

Также я используюматериал xAuth с их https://www.tumblr.com/oauth/access_token url.

Надеюсь, это поможет.Я на Rails с самоцветом Devise.

...