> ## Documentation Index
> Fetch the complete documentation index at: https://docs.x.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Autorización de una solicitud

> Construye un encabezado Authorization de OAuth 1.0a para firmar solicitudes a la X API, incluyendo los campos consumer key, nonce, signature, timestamp, token y version.

export const Button = ({href, children}) => {
  return <div className="not-prose group">
    <a href={href}>
      <button className="flex items-center space-x-2.5 py-1 px-4 bg-primary-dark dark:bg-white text-white dark:text-gray-950 rounded-full group-hover:opacity-[0.9] font-medium">
        <span>
          {children}
        </span>
        <svg width="3" height="24" viewBox="0 -9 3 24" class="h-6 rotate-0 overflow-visible"><path d="M0 0L3 3L0 6" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path></svg>
      </button>
    </a>
  </div>;
};

### 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](http://tools.ietf.org/html/rfc5849). 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](https://dev.x.com/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](/resources/fundamentals/developer-apps) en la [Developer Console](/resources/fundamentals/developer-portal).

|                      |                        |
| :------------------- | :--------------------- |
| oauth\_consumer\_key | xvz1evFS4wEEPTGEFPHBog |

**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\_nonce | kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg |

**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](/resources/fundamentals/authentication/oauth-1-0a/creating-a-signature).

|                  |                              |
| :--------------- | :--------------------------- |
| oauth\_signature | tnnArxj06cWHq44gCs1OSKk/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\_method | HMAC-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\_timestamp | 1318622958 |

**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](/resources/fundamentals/authentication/oauth-1-0a/obtaining-user-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](/resources/fundamentals/authentication/oauth-1-0a/obtaining-user-access-tokens) válido para tu cuenta en la página de configuración de tu [X app](/resources/fundamentals/developer-apps) en la [Developer Console](/resources/fundamentals/developer-portal).

|              |                                                    |
| :----------- | :------------------------------------------------- |
| oauth\_token | 370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb |

**Version**

El parámetro oauth\_version siempre debe ser 1.0 para cualquier solicitud enviada a la X API.

|                |     |
| :------------- | :-- |
| oauth\_version | 1.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](/resources/fundamentals/authentication/oauth-1-0a/obtaining-user-access-tokens) 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](/resources/fundamentals/authentication/oauth-1-0a/obtaining-user-access-tokens) 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.
