2012-05-21 21 views
6

Continuación de Get twitter public timeline, json+C#, no 3rd party librariesConfiguración de Twitter OAuth sin bibliotecas 3 ª parte

todavía soy nuevo en C# y OAuth así que por favor tengan paciencia conmigo si yo no entiendo nada

He creado una clase C# denominado oAuthClass, y éstas son las variables que tengo actualmente:

static class oAuthClass 
{ 
    public static void run() 
    { 
     int oauth_timestamp = GetTimestamp(DateTime.Now); 
     string oauth_nonce = PseudoRandomStringUsingGUID(); 
     string oauth_consumer_key = "consumer key here"; 
     string oauth_signature_method = "HMAC-SHA1"; 
     string oauth_version = "1.0"; 
    } 
} 

he leído en OAuth firmas, y yo elegimos utilizar HMAC-SHA1, por ahora, no sé cómo generar la firma, También estoy muy confundido después de leer y ver cosas como HTTP- Codificaciones y Cuerdas base y otras cosas (no tengo idea de lo que significan en absoluto), pero mi suposición es crear una URL que esté "codificada en Http", como espacios -> "% 20"?

En resumen: -¿Qué son las cadenas base?

-Am Estoy justo en los espacios ->% 20 ejemplo?

-HMAC-SHA1 implica un mensaje y una clave, ¿es el secreto del consumidor el mensaje? ¿La clave del consumidor es la clave, entonces?

-Cómo crear una firma mediante el uso del algoritmo HMAC-SHA1

-Si me las arreglo para crear la firma, ¿cómo puedo pasar estos valores a Twitter?

que podría utilizar

http://example.com?consumer_key=asdf&oauth_signature=signaturevalue&etc., 

pero he leído y al parecer la gente utilizar HTTP-Headers o algo (de nuevo, no se sabe muy bien de qué se trata)

Gracias! Una vez más, no hay bibliotecas 3 ª parte permitió :(

Respuesta

14

es muy difícil responder a su pregunta de manera definitiva, desde la implementación de un cliente de OAuth completo soplado no es trivial y requiere realmente entender la especificación OAuth1.0a. No es roca y ciencia, pero realmente requiere clasificar todos los pedazos.

Intentaré responder a su pregunta por partes.

¿Qué son las cuerdas base?

Una cadena base de la firma en OAuth se construye así:

  • de inicio con el método HTTP de la petición de su están enviando, en mayúsculas. E.g POST o GET.
  • Añadir un signo (&) carácter para que
  • Añadir la URL codificada (ciento codificado) URL a la que llama en su solicitud (no se incluyen los parámetros aquí)
  • añadir otro (&) carácter y comercial aquí
  • añadir Finalmente la URL codificada cadena de parámetros

voy a describir cómo crear la serie de parámetros que necesita en ese último paso.

Reúna todos los parámetros incluidos en la solicitud. Los encontrará en la URL como parte de la cadena de consulta y también en el cuerpo de la solicitud cuando tenga POST solicitudes de solicitud. Digamos por ejemplo que usted es POST -con el parámetro parameter1=value1 a la URL http://example.com/?parameter2=value2. Eso hace dos parámetros para incluir.

Ahora también tiene que resumir todos los parámetros de OAuth que se necesitan para que el protocolo sea feliz. Estos llevarían a una lista de parámetros buscando algo como esto:

  • oauth_consumer_key=fffffaaaafffaaaff
  • oauth_nonce=aaaaabbbbbcccccaaaaudi2313
  • oauth_signature_method=HMAC-SHA1
  • oauth_timestamp=1319633599
  • oauth_token=bbbbbbbbbfsdfdsdfsfserwerfsddffdsdf
  • oauth_version=1.0
  • parameter1=value1
  • parameter2=value2

Todas estas cadenas individuales que habrá que resolver lexicográfico en el nombre del parámetro (alfabéticamente debería ser suficiente), y concatenan en una cadena. Esa es tu cadena de parámetros.

¿Tengo razón en los espacios ->% 20 ejemplo?

Sí. Está hablando de la codificación porcentual, que también recibe el nombre de codificación HTTP y codificación URL. http://en.wikipedia.org/wiki/Percent-encoding.

HMAC-SHA1 implica un mensaje y una clave, ¿es el secreto del consumidor el mensaje? ¿La clave del consumidor es la clave, entonces?

El mensaje es la cadena de base de la firma que creó anteriormente. Y la clave es la combinación de su secreto de consumidor y su secreto de token de acceso. Por lo tanto, la clave debe verse así: CONSUMER_SECRET&TOKEN_SECRET (observe el símbolo comercial). En la primera solicitud absoluta que realices, todavía no tendrás un token secreto, entonces la clave es solo CONSUMER_SECRET& (nuevamente, fíjate en el signo ampersand).

Cómo crear una firma mediante el uso del algoritmo HMAC-SHA1.

He obtenido esto de http://oauth.googlecode.com/svn/code/csharp/OAuthBase.cs y se supone que los secretos y la cadena base están disponibles para el código.

Alimente básicamente una instancia HMACSHA1 con una clave y un mensaje, renderice ese hash y conviértalo en una cadena base64.

HMACSHA1 hmacsha1 = new HMACSHA1(); 
hmacsha1.Key = Encoding.ASCII.GetBytes(string.Format("{0}&{1}", UrlEncode(consumerSecret), string.IsNullOrEmpty(tokenSecret) ? "" : UrlEncode(tokenSecret))); 
byte[] dataBuffer = System.Text.Encoding.ASCII.GetBytes(signatureBaseString); 
byte[] hashBytes = hmacsha1.ComputeHash(dataBuffer); 

return Convert.ToBase64String(hashBytes); 

Si me las arreglo para crear la firma, ¿cómo puedo pasar estos valores a Twitter?

Debería poder investigar fácilmente qué es un encabezado HTTP.

Pero puede optar por agregar el resultado final de los parámetros y la firma a la URL, creo que Twitter incluso los acepta en el cuerpo de la solicitud en algunas solicitudes. Pero la forma preferida es a través del encabezado HTTP Authorization, ya que permite una separación clara entre los parámetros específicos del protocolo y específicos de la solicitud.

Debe tener un aspecto un poco como esto (tomado directamente de la OAuth 1.0a spec):

Authorization: OAuth realm="Example", 
    oauth_consumer_key="0685bd9184jfhq22", 
    oauth_token="ad180jjd733klru7", 
    oauth_signature_method="HMAC-SHA1", 
    oauth_signature="wOJIO9A2W5mFwDgiDvZbTSMK%2FPY%3D", 
    oauth_timestamp="137131200", 
    oauth_nonce="4572616e48616d6d65724c61686176", 
    oauth_version="1.0" 
+0

¡Gracias, esto es mucho más de lo que podría haber pedido! Trataré lo más que pueda para que esto funcione. Si tengo más problemas (aún relacionados con esta pregunta), ¿debo comenzar una nueva pregunta o continuar preguntando aquí? ¡Lo intentaré antes de preguntar! Además, ¿cómo puedo marcar una pregunta como resuelta o basta con marcar una respuesta? ¡Una vez más, gracias por esta publicación! Espero que ayude a otras personas que intenten hacer lo mismo :) – Maddermatics

+0

Comenta aquí si tienes problemas e intentaré ayudarte. También podemos usar la función de chat. Además, los recursos de desarrollo de Twitter son oro, utilízalos para conocer tanto a OAuth como a su API. –

+0

http://oi45.tinypic.com/6e0mcl.jpg - Captura de pantalla de baseString y del hash codificado en la url ¿Todo está correcto hasta este punto? Todavía estoy tratando de obtener la parte request_token por ahora Supongo que los encabezados HTTP son un lugar para los pares clave-valor? Aunque no estoy del todo seguro de cómo crearlos, ¿crear un nuevo objeto httpwebrequest y luego ...? – Maddermatics

0

Si está realmente confundido y sólo quieren una biblioteca fácil de usar que sugeriría que mirar en Twitterizer

No tiene documentación de ejemplos y es bastante fácil de configurar.

[EDIT] Uy, lo siento acabamos de leer que no busca las bibliotecas 3 ª parte. lo sentimos

+0

tuve éxito con el uso de Twitterizer antes, pero se dio cuenta que no podía usar las bibliotecas 3 ª parte de mi proyecto sólo recientemente así .. .usted sabe el resto, ¡gracias! – Maddermatics

Cuestiones relacionadas