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

# Autorizar una solicitud

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>;
};

<div id="authorizing-a-request">
  ### Autorizar una solicitud
</div>

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

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

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

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

|                  |                              |
| :--------------- | :--------------------------- |
| oauth\_signature | tnnArxj06cWHq44gCs1OSKk/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\_method | HMAC-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\_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 esas se tratan en detalle en [Obtener tokens de acceso](/es/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 conoce como un **access token**.

Puedes generar un [access token](/es/resources/fundamentals/authentication/oauth-1-0a/obtaining-user-access-tokens) válido para tu cuenta en la página de configuración de tu [App de X](/es/resources/fundamentals/developer-apps) en la [Consola de desarrollador](/es/resources/fundamentals/developer-portal).

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

**Versión**

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

|                |     |
| :------------- | :-- |
| oauth\_version | 1.0 |

<div id="building-the-header-string">
  #### Construcción de la cadena de encabezado
</div>

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