Saltar al contenido principal

Autorización de una solicitud

El propósito de este documento es mostrarte cómo modificar solicitudes HTTP para enviar solicitudes autorizadas a la X API. Todas las APIs de X se basan en el protocolo HTTP. Esto significa que cualquier software que desarrolles y utilice las APIs de X envía una serie de mensajes estructurados a los servidores de X. Por ejemplo, una solicitud para publicar el texto “Hello Ladies + Gentlemen, a signed OAuth request!” como un Tweet se verá así:
POST /1.1/statuses/update.json?include_entities=true HTTP/1.1
Accept: */*
Connection: close
User-Agent: OAuth gem v0.4.4
Content-Type: application/x-www-form-urlencoded
Content-Length: 76
Host: api.x.com

status=Hola%2C%20se%C3%B1oras%20y%20se%C3%B1ores%2C%20una%20solicitud%20OAuth%20firmada%21
Cualquier biblioteca HTTP debería poder generar y emitir la solicitud anterior sin demasiada dificultad. Sin embargo, la solicitud anterior se considera inválida, ya que no hay forma de saber:
  1. Qué aplicación está realizando la solicitud
  2. En nombre de qué usuario se publica la solicitud
  3. Si el usuario ha otorgado a la aplicación autorización para publicar en su nombre
  4. Si la solicitud ha sido manipulada por un tercero durante su tránsito
Para permitir que las aplicaciones proporcionen esta información, la API de X se basa en el protocolo OAuth 1.0a. De forma muy simplificada, la implementación de X requiere que las solicitudes que necesiten autorización incluyan un encabezado HTTP Authorization adicional con suficiente información para responder a las preguntas enumeradas anteriormente. Una versión de la solicitud HTTP mostrada arriba, modificada para incluir este encabezado, se ve así (normalmente el encabezado Authorization debería estar en una sola línea, pero aquí se ha dividido para mejorar la legibilidad):
POST /1.1/statuses/update.json?include_entities=true HTTP/1.1
Accept: */*
Connection: close
User-Agent: OAuth gem v0.4.4
Content-Type: application/x-www-form-urlencoded
Autorización:
OAuth oauth\_consumer\_key="xvz1evFS4wEEPTGEFPHBog",
oauth_nonce="kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg",
oauth_signature="tnnArxj06cWHq44gCs1OSKk%2FjLY%3D",
oauth\_signature\_method="HMAC-SHA1",
oauth_timestamp="1318622958",
oauth_token="370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb",
oauth_version="1.0"
Content-Length: 76
Host: api.x.com

status=Hola%20se%C3%B1oras%20y%20se%C3%B1ores%2c%20una%20solicitud%20de%20OAuth%20firmada%21
Cuando se creó esta solicitud, la X API la habría aceptado como válida. Si este proceso de firma te parece fuera del alcance de tu integración, considera usar Web Intents, que no necesitan usar OAuth para interactuar con la X API.   Recopilación de parámetros Deberías poder ver que el encabezado contiene 7 pares clave/valor, donde todas las claves comienzan con la cadena “oauth_”. Para cualquier solicitud a la X API, recopilar estos 7 valores y crear un encabezado similar te permitirá especificar la autorización de la solicitud. A continuación se describe cómo se generó cada valor: Clave de consumidor El oauth_consumer_key identifica qué aplicación está realizando la solicitud. Obtén este valor en la página de configuración de tu X app en el developer portal.
oauth_consumer_keyxvz1evFS4wEEPTGEFPHBog
Nonce El oauth_nonce parámetro es un token único que tu aplicación debe generar para cada solicitud. X usará este valor para determinar si una solicitud se ha enviado varias veces. El valor de esta solicitud se generó codificando en base64 32 bytes de datos aleatorios y eliminando todos los caracteres no alfanuméricos, pero cualquier método que produzca una cadena alfanumérica razonablemente aleatoria debería funcionar aquí.
oauth_noncekYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg
Firma El parámetro oauth_signature contiene un valor que se genera al procesar todos los demás parámetros de la solicitud y dos valores secretos mediante un algoritmo de firma. La firma permite a X verificar que la solicitud no se modificó en tránsito, identificar la aplicación que la envía y confirmar que dicha aplicación tiene autorización para interactuar con la cuenta del usuario. El proceso para calcular la oauth_signature para esta solicitud se describe en Creating a signature.
oauth_signaturetnnArxj06cWHq44gCs1OSKk/jLY=
Método de firma El oauth_signature_method utilizado por X es HMAC-SHA1. Este valor debe usarse para cualquier solicitud autorizada enviada a la X API.
oauth_signature_methodHMAC-SHA1
Marca de tiempo El parámetro oauth_timestamp indica cuándo se creó la solicitud. Este valor debe ser la cantidad de segundos transcurridos desde la época Unix en el momento en que se genera la solicitud, y se puede generar fácilmente en la mayoría de los lenguajes de programación. X rechazará las solicitudes creadas demasiado tiempo atrás, por lo que es importante mantener sincronizado con NTP el reloj de la computadora que genera las solicitudes.
oauth_timestamp1318622958
Token El parámetro oauth_token normalmente representa el permiso de un usuario para compartir el acceso a su cuenta con tu aplicación. Existen algunas solicitudes de autenticación en las que este valor no se envía o adopta otra forma de token, pero esas se tratan en detalle en Obtaining access tokens. Para la mayoría de las solicitudes de uso general, usarás lo que se denomina un access token. Puedes generar un access token válido para tu cuenta en la página de configuración de tu X app en el developer portal.
oauth_token370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb
Versión El parámetro oauth_version siempre debe ser 1.0 para cualquier solicitud enviada a la X API.
oauth_version1.0

Construcción de la cadena de encabezado

Para construir la cadena de encabezado, imagina que escribes en una cadena llamada DST.
  1. Añade la cadena “OAuth ” (incluido el espacio al final) a DST.
  2. Para cada par clave/valor de los 7 parámetros enumerados arriba:
    1. Codifica por porcentaje la clave y añádela a DST.
    2. Añade el carácter de igualdad ”=” a DST.
    3. Añade una comilla doble ””” a DST.
    4. Codifica por porcentaje el valor y añádelo a DST.
    5. Añade una comilla doble ””” a DST.
    6. Si quedan pares clave/valor, añade una coma ”,” y un espacio ” ” a DST.
Presta especial atención a la codificación por porcentaje de los valores al construir esta cadena. Por ejemplo, el valor de oauth_signature de tnnArxj06cWHq44gCs1OSKk/jLY= debe codificarse como tnnArxj06cWHq44gCs1OSKk%2FjLY%3D. Realizar estos pasos con los parámetros recopilados arriba da como resultado la siguiente cadena:
OAuth oauth_consumer_key="xvz1evFS4wEEPTGEFPHBog", oauth_nonce="kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg", oauth_signature="tnnArxj06cWHq44gCs1OSKk%2FjLY%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1318622958", oauth_token="370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb", oauth_version="1.0"
Este valor debe configurarse como el encabezado Authorization de la solicitud.