Skip to main content

Autorización de una solicitud

El propósito de este documento es mostrarte cómo modificar las solicitudes HTTP con el fin de enviar solicitudes autorizadas a la X API. Todas las APIs de X se basan en el protocolo HTTP. Esto significa que cualquier software que escribas que use 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á algo 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=Hello%20Ladies%20%2b%20Gentlemen%2c%20a%20signed%20OAuth%20request%21
Cualquier biblioteca HTTP debería poder generar y emitir la solicitud anterior con una dificultad mínima. Sin embargo, la solicitud anterior se considera inválida, ya que no hay forma de saber:
  1. Qué aplicación está haciendo la solicitud
  2. En nombre de qué usuario se está publicando 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 el tránsito
Para permitir que las aplicaciones proporcionen esta información, la API de X se basa en el protocolo OAuth 1.0a. A un nivel muy simplificado, la implementación de X requiere que las solicitudes que necesitan autorización contengan un encabezado HTTP Authorization adicional con información suficiente 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 se ha dividido aquí para mayor 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
Authorization:
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=Hello%20Ladies%20%2b%20Gentlemen%2c%20a%20signed%20OAuth%20request%21
Cuando se creó esta solicitud, habría sido aceptada por la X API como válida. Si este proceso de firma parece estar fuera del alcance de tu integración, considera usar Web Intents, que no necesitan usar OAuth para interactuar con la X API. Recopilando parámetros Deberías 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 para la solicitud. Cómo se generó cada valor se describe a continuación: Consumer key La oauth_consumer_key identifica qué aplicación está realizando la solicitud. Obtén este valor desde la página de configuración de tu X app en la Developer Console.
oauth_consumer_keyxvz1evFS4wEEPTGEFPHBog
Nonce El parámetro oauth_nonce es un token único que tu aplicación debe generar para cada solicitud única. X utilizará este valor para determinar si una solicitud se ha enviado varias veces. El valor para esta solicitud se generó codificando en base64 32 bytes de datos aleatorios y eliminando todos los caracteres que no fueran palabras, pero cualquier enfoque que produzca una cadena alfanumérica relativamente aleatoria debería estar bien aquí.
oauth_noncekYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg
Signature El parámetro oauth_signature contiene un valor que se genera ejecutando todos los demás parámetros de la solicitud y dos valores secretos a través de un algoritmo de firma. El propósito de la firma es que X pueda verificar que la solicitud no ha sido modificada durante el tránsito, verificar la aplicación que envía la solicitud y verificar que la 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 Creación de una firma.
oauth_signaturetnnArxj06cWHq44gCs1OSKk/jLY=
Signature method El oauth_signature_method utilizado por X es HMAC-SHA1. Este valor debe usarse para cualquier solicitud autorizada enviada a la API de X.
oauth_signature_methodHMAC-SHA1
Timestamp El parámetro oauth_timestamp indica cuándo se creó la solicitud. Este valor debe ser el número de segundos desde el epoch Unix en el momento en que se genera la solicitud, y debería ser fácil de generar en la mayoría de los lenguajes de programación. X rechazará las solicitudes creadas demasiado tiempo en el pasado, por lo que es importante mantener el reloj del ordenador que genera las solicitudes sincronizado con NTP.
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. Hay algunas solicitudes de autenticación en las que este valor no se pasa o es una forma diferente de token, pero se cubren en detalle en Obtención de access tokens. Para la mayoría de las solicitudes de propósito 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 la Developer Console.
oauth_token370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb
Version El parámetro oauth_version siempre debe ser 1.0 para cualquier solicitud enviada a la X API.
oauth_version1.0

Construyendo la cadena del encabezado

Para construir la cadena del encabezado, imagina escribir a una cadena llamada DST.
  1. Añade la cadena “OAuth ” (incluyendo el espacio al final) a DST.
  2. Para cada par clave/valor de los 7 parámetros listados anteriormente:
    1. Codifica por porcentaje la clave y añádela a DST.
    2. Añade el carácter igual ’=’ 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 oauth_signature de tnnArxj06cWHq44gCs1OSKk/jLY= debe codificarse como tnnArxj06cWHq44gCs1OSKk%2FjLY%3D. Al realizar estos pasos con los parámetros recopilados anteriormente, se obtiene 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 establecerse como el encabezado Authorization de la solicitud.