iphone ios oauth tumblr

iphone - La publicación de la imagen de Tumblr OAuth me otorga 401/"Credenciales de OAuth no válidas"



ios (4)

Tengo una aplicación de iOS que publica imágenes en varios servicios, incluido Twitter, y estoy intentando ampliar ese soporte a tumblr. He adaptado un código fuente abierto para la lógica de encabezado OAuth 1.0a y está funcionando lo suficientemente bien como para tener éxito para twitter + twitpic y para la autenticación de tumblr. Sin embargo, las publicaciones de imágenes en tumblr están fallando con el estado 401 y la respuesta de cadena "Credenciales de OAuth no válidas"

Para simplificar, mis únicas secciones de partes múltiples son el tipo de publicación y los datos de imagen.

Así que mi POST simple es para http://www.tumblr.com/api/write , la cadena base de la firma es (más o menos, ya que he editado mi clave y token de consumidor, y los saltos de línea añadidos para la legibilidad):

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

mi encabezado de Oauth es (de nuevo, linebreaks agregados aquí para la legibilidad):

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"

los únicos otros encabezados que agrego son Content-Type (multipart / form-data) y Content-Length, y el cuerpo del mensaje es simplemente:

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

¿Alguien puede decirme si he hecho algo mal con mi cadena base de firma o con el encabezado de autenticación, o si hay algún truco para hacer que las publicaciones de tumblr oauth funcionen?


Acabo de hacer un volcado de la cadena base que genera mi aplicación al publicar una entrada de foto en Tumblr. Se han agregado saltos de línea para disminuir la oscuridad. Espero eso ayude.

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

Una cosa es que no notificaste a Tumblr que vas a publicar una foto usando el parámetro tipo .


Al tener exactamente el mismo problema con mi implementación de OAuth en Silverlight, implementé el resto de la API sin problemas, y este método funciona si no usa OAuth y solo envía encabezados de correo electrónico / contraseña.

Sin embargo, la publicación de Arvin me acaba de mostrar el problema, está incluyendo los otros campos que no son de archivo en su OAuth. Acabo de hacer lo mismo con mi publicación, por lo que estaban en el cuerpo de formulario de varias partes pero también se agregaron a la firma OAuth, ¡y ahora estoy cargando publicaciones de fotos sin ningún problema!


Tuve el mismo problema: parece que la biblioteca OAuth que utilicé (GTM OAuth) no estaba usando los campos POST Data para la firma. Después de agregar los campos escribir y subtitular como una cadena de consulta, la biblioteca OAuth los usó y pude cargar una foto / publicación / lo que sea.

Parece que cada campo de cuerpo de publicación (excepto los datos binarios) debe ser parte de la firma de OAuth.