Saltar al contenido principal

Autorización de una solicitud

El propósito de este documento es mostrarle cómo modificar las solicitudes HTTP para enviar solicitudes autorizadas a la X API. Todas las API de X se basan en el protocolo HTTP. Esto significa que cualquier software que usted desarrolle y utilice 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á 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 enviar la solicitud anterior con un mínimo de 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 otorgado a la aplicación autorización para publicar en su nombre
  4. Si la solicitud ha sido manipulada por un tercero durante la transmisión
Para permitir que las aplicaciones proporcionen esta información, la API de X se basa en el protocolo OAuth 1.0a. En términos muy simplificados, 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 facilitar 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, 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 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: 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 el portal de desarrolladores.
oauth_consumer_keyxvz1evFS4wEEPTGEFPHBog
Nonce El parámetro oauth_nonce es un token único que tu aplicación debe generar para cada solicitud. X usa 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 enfoque que produzca una cadena alfanumérica suficientemente 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 firma permite a X verificar que la solicitud no se haya modificado en tránsito, identificar la aplicación que envía la solicitud y comprobar 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 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á solicitudes creadas demasiado tiempo atrás, por lo que es importante mantener sincronizado con NTP el reloj del equipo que genera las solicitudes.
oauth_timestamp1318622958
Token El parámetro oauth_token normalmente representa el permiso de un usuario para compartir acceso a su cuenta con tu aplicación. Hay algunas solicitudes de autenticación en las que este valor no se envía o adopta una forma diferente de token, pero esas se tratan en detalle en Obtaining access tokens. 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 X App en el portal de desarrolladores.
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, imagine que escribe en una cadena llamada DST.
  1. Agregue la cadena “OAuth ” (incluido el espacio al final) a DST.
  2. Para cada par clave/valor de los 7 parámetros enumerados arriba:
    1. Codifique por porcentaje la clave y agréguela a DST.
    2. Agregue el carácter de igual ’=’ a DST.
    3. Agregue una comilla doble ’”’ a DST.
    4. Codifique por porcentaje el valor y agréguelo a DST.
    5. Agregue una comilla doble ’”’ a DST.
    6. Si quedan pares clave/valor, agregue una coma ’,’ y un espacio ’ ’ a DST.
Preste 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 establecerse como el encabezado Authorization de la solicitud.
I