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"
¡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
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. –
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