Saltar al contenido principal

Autorizar una solicitud

El propósito de este documento es mostrarte cómo modificar solicitudes HTTP con el fin de enviar solicitudes autorizadas a la X API. Todas las API de X se basan en el protocolo HTTP. Esto significa que cualquier software que escribas y que use las API 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á aproximadamente 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 sin demasiada dificultad. Sin embargo, la solicitud anterior se considera no válida, ya que no hay forma de saber:
  1. Qué aplicación está realizando la solicitud
  2. En nombre de qué usuario se está publicando la solicitud
  3. Si el usuario ha concedido a la aplicación autorización para publicar en su nombre
  4. Si la solicitud ha sido manipulada por un tercero durante su transmisión
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 contengan 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, sería la siguiente (normalmente el encabezado Authorization debería ir 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
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.   Recopilación de parámetros Puedes 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. A continuación se describe cómo se generó cada valor: Consumer key 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 la Consola de desarrollador.
oauth_consumer_keyxvz1evFS4wEEPTGEFPHBog
Nonce El parámetro oauth_nonce es un token único que tu aplicación debería 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 que no pertenecen a palabras (no alfanuméricos ni guiones bajos), pero cualquier enfoque que produzca una cadena alfanumérica relativamente aleatoria debería funcionar aquí.
oauth_noncekYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg
Signature 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 finalidad de la firma es permitir que X verifique que la solicitud no ha sido modificada en tránsito, que confirme la aplicación que envía la solicitud y que compruebe que esa aplicación tiene autorización para interactuar con la cuenta del usuario. El proceso para calcular oauth_signature para esta solicitud se describe en Crear una firma.
oauth_signaturetnnArxj06cWHq44gCs1OSKk/jLY=
Método de firma El oauth_signature_method utilizado por X es HMAC-SHA1. Este valor se debe usar 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 el número de segundos transcurridos desde la época Unix en el momento en que se genera la solicitud y debería poder generarse fácilmente en la mayoría de los lenguajes de programación. X rechazará las solicitudes que se hayan creado hace demasiado tiempo, por lo que es importante mantener el reloj de la computadora 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 esas se tratan en detalle en Obtener tokens de acceso. Para la mayoría de las solicitudes de propósito general, usarás lo que se conoce como un access token. Puedes generar un access token válido para tu cuenta en la página de configuración de tu App de X en la Consola de desarrollador.
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 estás escribiendo 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 indicados anteriormente:
    1. Codifica en porcentaje la clave y añádela a DST.
    2. Añade el signo igual ‘=’ a DST.
    3. Añade una comilla doble ‘”’ a DST.
    4. Codifica en 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 en porcentaje de los valores al construir esta cadena. Por ejemplo, el valor de oauth_signature de tnnArxj06cWHq44gCs1OSKk/jLY= debe codificarse como tnnArxj06cWHq44gCs1OSKk%2FjLY%3D. Aplicar estos pasos a 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 establecerse como el encabezado Authorization de la solicitud.