new developer desarrollador cuenta app c# oauth twitter-oauth

c# - desarrollador - twitter developer login



Adquirir token de solicitud de Twitter fallado (1)

Su firma oaut se enumera como "oauth_signagure" en su solicitud.

o Los parámetros de Auth deben ordenarse antes del envío, pero la firma debe estar al final de la solicitud de autorización. (9.1.1 en http://oauth.net/core/1.0/#anchor14 )

Es posible que también deba especificar un dominio = "/ oauth / request_token". Es opcional, pero como recuerdo correctamente, Twitter quiere este para un token de solicitud.

Si puede agregar su código, podemos encontrar lo que está sucediendo, ya que es posible que no esté compilando su solicitud y clave para el hashing de la firma correctamente.

Seguí las instrucciones en http://dev.twitter.com/pages/auth#request-token , y desarrollé la clase de ac # para hacer la autorización de OAuth. Usé los parámetros en la página, y la cadena base de la firma de salida y la firma coinciden en la página. Entonces creo que la parte del algoritmo es correcta. Luego reemplacé los parámetros con los de mi aplicación de Twitter, pero no pude adquirir el token de solicitud del servicio de Twitter. Y los datos de respuesta son "No se pudo validar la firma o el token".

Aquí está la solicitud que envío (utilicé http, en lugar de https para la depuración):

POST http://api.twitter.com/oauth/request_token HTTP/1.1 Content-Type: application/x-www-form-urlencoded Authorization: OAuth oauth_callback="http%3A%2F%2Flocalhost%3A3005%2Fthe_dance%2Fprocess_callback%3Fservice_provider_id%3D11", oauth_consumer_key="GDdmIQH6jhtmLUypg82g", oauth_nonce="QP70eNmVz8jvdPevU3oJD2AfF7R7odC2XJcn4XlZJqk", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1272323042", oauth_version="1.0", oauth_signagure="IP%2FEEoc4tKdiobM%2FKH5cPK69cJM%3D" Host: api.twitter.com Proxy-Connection: Keep-Alive

Y aquí está la respuesta:

HTTP/1.1 401 Unauthorized Connection: Keep-Alive Connection: Proxy-Support Content-Length: 44 Via: 1.1 APS-PRXY-09 Expires: Tue, 31 Mar 1981 05:00:00 GMT Date: Fri, 08 Apr 2011 05:47:20 GMT Content-Type: text/html; charset=utf-8 Server: hi Proxy-Support: Session-Based-Authentication Status: 401 Unauthorized X-Transaction: 1302241640-40339-46793 Last-Modified: Fri, 08 Apr 2011 05:47:20 GMT X-Runtime: 0.01519 Pragma: no-cache X-Revision: DEV Cache-Control: no-cache, no-store, must-revalidate, pre-check=0, post-check=0 Set-Cookie: k=207.46.55.29.1302241640766556; path=/; expires=Fri, 15-Apr-11 05:47:20 GMT; domain=.twitter.com Set-Cookie: guest_id=13022416407746962; path=/; expires=Sun, 08 May 2011 05:47:20 GMT Set-Cookie: _twitter_sess=BAh7CDoPY3JlYXRlZF9hdGwrCEiBpjMvAToHaWQiJWMzMTViOGZiNDkzMDRi%250ANjNhMmQwYmVkZDBhNTc2NTc4IgpmbGFzaElDOidBY3Rpb25Db250cm9sbGVy%250AOjpGbGFzaDo6Rmxhc2hIYXNoewAGOgpAdXNlZHsA--177afd5c0f6fe30005ab9a9412e6f85ab03cbfa7; domain=.twitter.com; path=/; HttpOnly Vary: Accept-Encoding Failed to validate oauth signature and token

Así es como genero los parámetros normalizados:

string.Join("&", (from d in this.BuildParameterDict() select string.Format("{0}={1}", OAuthEncoding.Encode(d.Key), OAuthEncoding.Encode(d.Value))))

El método BuildParameterDict ordenará construir una lista con: parameters from query string; parámetros del cuerpo; parámetros específicos de ''oauth'', excepto el ''oauth_signature''.

Entonces la cadena base de la firma es generada por:

StringBuilder sb = new StringBuilder(); sb.Append(OAuthEncoding.Encode(this._request.Method)); sb.Append(''&''); sb.Append(OAuthEncoding.Encode(this.GetNormalUri())); sb.Append(''&''); sb.Append(OAuthEncoding.Encode(this.GetNormalParameters()));

Esta es la cadena base generada con parámetros de la página anterior:

POST & https% 3A% 2F% 2Fapi.twitter.com% 2Foauth% 2Frequest_token y oauth_callback% 3Dhttp% 253A% 252F% 252Flocalhost% 253A3005% 252Fthe_dance% 252Fprocess_callback% 253Fservice_provider_id% 253D11% 26oauth_consumer_key% 3DGDdmIQH6jhtmLUypg82g% 26oauth_nonce% 3DQP70eNmVz8jvdPevU3oJD2AfF7R7odC2XJcn4XlZJqk% 26oauth_signature_method% 3DHMAC-SHA1% 26oauth_timestamp% 3D1272323042% 26oauth_version% 3D1.0

que es idéntico a la cadena en esa página.