Saltar al contenido principal

Creación de una firma

Esta página explica cómo generar una firma HMAC-SHA1 de OAuth 1.0a para una solicitud HTTP. Esta firma será adecuada para enviarla a la X API como parte de una solicitud autorizada, tal como se describe en autorización de una solicitud. La solicitud utilizada para demostrar la firma es un POST a https://api.x.com/1.1/statuses/update.json. La solicitud sin procesar se ve así:
POST /1.1/statuses/update.json?include_entities=true HTTP/1.1
Accept: */*
Conexión: close
User-Agent: OAuth gem v0.4.4
Content-Type: application/x-www-form-urlencoded
Content-Length: 76
Host: api.x.com

status=Hola%20damas%20%2b%20caballeros%2c%20una%20solicitud%20OAuth%20firmada%21
Recopilar el método de solicitud y la URL Para generar una firma, comience por determinar el método HTTP y la URL de la solicitud. Estos dos datos se conocen al crear la solicitud, por lo que es fácil obtenerlos. El método de solicitud casi siempre será GET o POST para solicitudes de la X API.
Método HTTPPOST
La URL base es la URL a la que se dirige la solicitud, sin incluir la cadena de query ni los parámetros de hash. Es importante usar el protocolo correcto aquí, así que asegúrese de que la parte “https://” de la URL coincida con la solicitud real enviada a la API.
URL basehttps://api.x.com/1.1/statuses/update.json

Recopilación de parámetros

A continuación, reúna todos los parámetros incluidos en la solicitud. Hay dos ubicaciones para estos parámetros adicionales: la URL (como parte de la cadena de consulta, query) y el cuerpo de la solicitud. La solicitud de ejemplo incluye un único parámetro en ambas ubicaciones:
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%20damas%20y%20caballeros%2c%20una%20solicitud%20OAuth%20firmada%21
Una solicitud HTTP tiene parámetros codificados en la URL, pero debes recopilar los valores en bruto. Además de los parámetros de la solicitud, cada parámetro oauth_* debe incluirse en la firma, así que recopílalos también. Estos son los parámetros de autorizar una solicitud:
statusHello Ladies + Gentlemen, a signed OAuth request!
include_entitiestrue
oauth_consumer_keyxvz1evFS4wEEPTGEFPHBog
oauth_noncekYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg
oauth_signature_methodHMAC-SHA1
oauth_timestamp1318622958
oauth_token370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb
oauth_version1.0
Estos valores deben codificarse en una única cadena, que se usará más adelante. El proceso para construir la cadena es muy específico:
  1. Codifica con porcentaje cada clave y valor que se firmará.
  2. Ordena la lista de parámetros alfabéticamente [1] por la clave codificada [2].
  3. Para cada par clave/valor:
  4. Añade la clave codificada a la cadena de salida.
  5. Añade el carácter ‘=’ a la cadena de salida.
  6. Añade el valor codificado a la cadena de salida.
  7. Si quedan más pares clave/valor, añade un carácter ‘&’ a la cadena de salida.  
[1] La especificación de OAuth indica ordenar lexicográficamente, que es el orden alfabético predeterminado para muchas bibliotecas. [2] En el caso de dos parámetros con la misma clave codificada, la especificación de OAuth indica seguir ordenando según el valor. Sin embargo, X no acepta claves duplicadas en solicitudes a la API.   Cadena de parámetros La siguiente cadena de parámetros se producirá repitiendo estos pasos con los parámetros recopilados anteriormente:
statusHello Ladies + Gentlemen, a signed OAuth request!
include_entitiestrue
oauth_consumer_keyxvz1evFS4wEEPTGEFPHBog
oauth_noncekYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg
oauth_signature_methodHMAC-SHA1
oauth_timestamp1318622958
oauth_token370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb
oauth_version1.0

Creación de la cadena base de la firma

Los tres valores recopilados hasta ahora deben unirse para crear una única cadena, a partir de la cual se generará la firma. La especificación de OAuth denomina a esto la cadena base de la firma. Para codificar el método HTTP, la URL base y la cadena de parámetros en una única cadena:
  1. Convierta el método HTTP a mayúsculas y asigne este valor a la cadena de salida.
  2. Agregue el carácter ‘&’ a la cadena de salida.
  3. Codifique por porcentaje la URL y agréguela a la cadena de salida.
  4. Agregue el carácter ‘&’ a la cadena de salida.
  5. Codifique por porcentaje la cadena de parámetros y agréguela a la cadena de salida.  
Esto producirá la siguiente cadena base de la firma:
POST&https%3A%2F%2Fapi.x.com%2F1.1%2Fstatuses%2Fupdate.json&include\_entities%3Dtrue%26oauth\_consumer\_key%3Dxvz1evFS4wEEPTGEFPHBog%26oauth\_nonce%3DkYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg%26oauth\_signature\_method%3DHMAC-SHA1%26oauth\_timestamp%3D1318622958%26oauth\_token%3D370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb%26oauth_version%3D1.0%26status%3DHola%2520damas%2520%252B%2520caballeros%252C%2520una%2520solicitud%2520OAuth%2520firmada%2521
Asegúrate de aplicar codificación porcentual a la cadena de parámetros. La cadena base de la firma debe contener exactamente 2 caracteres de ampersand ‘&’. Los caracteres de porcentaje ‘%’ en la cadena de parámetros deben codificarse como %25 en la cadena base de la firma.

Obtención de una clave de firma

Los últimos datos que hay que recopilar son secretos que identifican la X App que realiza la solicitud y al usuario en cuyo nombre se realiza. Es muy importante señalar que estos valores son extremadamente sensibles y nunca deben compartirse con nadie. El valor que identifica tu App ante X se denomina consumer secret y se puede encontrar en el portal de desarrolladores al ver la página de detalles de la App. Este será el mismo para cada solicitud que envíe tu X App.
Consumer secretkAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw
El valor que identifica la cuenta en cuyo nombre actúa tu aplicación se denomina OAuth token secret. Este valor se puede obtener de varias maneras, todas descritas en obtaining access tokens.
OAuth token secretLswwdoUaIvS8ltyTt5jkRh4J50vUPVVHtR2YPi5kE
Una vez más, es muy importante mantener estos valores privados para tu aplicación. Si crees que se han visto comprometidos, regenera tus tokens (los tokens de esta página se han marcado como no válidos para solicitudes reales). Ambos valores deben combinarse para formar una signing key que se utilizará para generar la firma. La clave de firma es simplemente el token secret percent encoded: Ten en cuenta que hay algunos flujos, como al obtener un request token, en los que aún no se conoce el token secret. En este caso, la clave de firma debe consistir en el consumer secret percent encoded seguido del carácter ampersand ‘&’.
Signing keykAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw&LswwdoUaIvS8ltyTt5jkRh4J50vUPVVHtR2YPi5kE

Cálculo de la firma

Finalmente, la firma se calcula pasando la cadena base de la firma y la clave de firma al algoritmo HMAC-SHA1. Los detalles del algoritmo se describen en la función hash_hmac. La salida de la función de firma HMAC es una cadena binaria. Esta debe codificarse en base64 para generar la cadena de la firma. Por ejemplo, la salida dada la cadena base y la clave de firma indicadas en esta página es 2E CF 77 84 98 99 6D 0D DA 90 5D C7 17 7C 75 07 3F 3F CD 4E. Ese valor, al convertirlo a base64, es la firma OAuth para esta solicitud:
Firma OAuthLs93hJiZbQ3akF3HF3x1Bz8/zU4=
I