> ## 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.

# Obtención de tokens de acceso con el flujo OAuth de 3 partes

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="obtaining-access-tokens-using-3-legged-oauth-flow">
  ### Obtaining Access Tokens using 3-legged OAuth flow
</div>

Para realizar acciones en nombre de otro usuario, necesitas obtener sus tokens de acceso. Los tokens de acceso especifican la cuenta de X en cuyo nombre se realiza la solicitud, por lo que, para que puedas obtenerlos, primero deberán otorgarte acceso. Estos tokens no caducan, pero el usuario puede revocarlos en cualquier momento.

X te permite obtener tokens de acceso de usuario mediante el flujo OAuth de 3 pasos (3-legged OAuth), que permite que tu aplicación obtenga un **token de acceso** y un secreto de token de acceso redirigiendo a un usuario a X y haciendo que autorice tu aplicación. Este flujo es casi idéntico al descrito en [implementing Log in with X](/es/resources/fundamentals/authentication/guides/log-in-with-x), con dos excepciones:

* Se utiliza el endpoint [GET oauth/authorize](/es/resources/fundamentals/authentication/api-reference#get-oauth-authorize) en lugar de [GET oauth/authenticate](/es/resources/fundamentals/authentication/api-reference#get-oauth-authenticate).
* Al usuario **siempre** se le pedirá que autorice el acceso a tu aplicación, incluso si previamente ya lo había otorgado.
   

Antes de comenzar, tendrás que comprobar los permisos de tu [aplicación](/es/resources/fundamentals/developer-apps) y conocer las consumer keys y la URL de callback. Si no tienes una URL de callback o una interfaz de usuario accesible públicamente, considera usar la [autorización basada en PIN](/es/resources/fundamentals/authentication/oauth-1-0a/pin-based-oauth), pensada para aplicaciones que no pueden acceder a un navegador web o incrustarlo para redirigir al usuario después de la autorización. 

Los posibles estados de la interacción de inicio de sesión con 3 pasos se ilustran en el siguiente diagrama de flujo:

![](https://cdn.cms-twdigitalassets.com/content/dam/developer-twitter/docs/obtaining-access-tokens.png.twimg.1920.png)

<div id="overview-of-the-process">
  #### Descripción general del proceso
</div>

A grandes rasgos, el proceso de 3-legged OAuth hará lo siguiente:

1. Crear una solicitud para que una aplicación cliente obtenga un token de solicitud.
2. Hacer que el usuario se autentique y enviar a la aplicación cliente un token de solicitud.
3. Convertir el token de solicitud en un token de acceso de usuario utilizable.

**Aclaración de terminología**

En la guía a continuación, puede que veas diferentes términos que se refieren a lo mismo.

**Credenciales de cliente:**

* App Key === API Key === Consumer API Key === Consumer Key === Customer Key === `oauth_consumer_key`
* App Key Secret === API Secret Key === Consumer Secret === Consumer Key === Customer Key === `oauth_consumer_secret`
* Callback URL === `oauth_callback`
   

**Credenciales temporales:**

* Request Token === `oauth_token`
* Request Token Secret === `oauth_token_secret`
* oauth\_verifier
   

**Credenciales de token:**

* Access token === Token === `oauth_token` resultante
* Access token secret === Token Secret === `oauth_token_secret` resultante

<div id="walkthrough-steps">
  #### Pasos del recorrido
</div>

**Paso 1: [POST oauth/request\_token](/es/resources/fundamentals/authentication/api-reference#post-oauth-request-token)**

Crea una solicitud para que una aplicación cliente obtenga un token de solicitud.

El único parámetro específico en esta solicitud es oauth\_callback, que debe ser una versión [codificada en URL](/es/resources/fundamentals/authentication/oauth-1-0a/percent-encoding-parameters) de la URL a la que deseas que tu usuario sea redirigido cuando complete el paso 2. Los parámetros restantes se agregan mediante el proceso de firma de OAuth.

Ten en cuenta que cualquier URL de callback que uses con el endpoint [POST oauth/request\_token](/es/resources/fundamentals/authentication/api-reference#post-oauth-request-token) deberá configurarse dentro de la configuración de tu [App de desarrollador](/es/resources/fundamentals/developer-apps) en la página de detalles de la app en la Consola de desarrollador.
 

**La solicitud incluye:**

`oauth_callback="https%3A%2F%2FyourCallbackUrl.com"`

`oauth_consumer_key="cChZNFj6T5R0TigYB9yd1w" `

Tu app debe examinar el estado HTTP de la respuesta. Cualquier valor distinto de 200 indica un error. El cuerpo de la respuesta contendrá los parámetros `oauth_token`, `oauth_token_secret` y `oauth_callback_confirmed`. Tu app debe verificar que `oauth_callback_confirmed` sea true y almacenar los otros dos valores para los siguientes pasos.
 

**La respuesta incluye:**

`oauth_token=NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0`

`oauth_token_secret=veNRnAWe6inFuo8o2u8SLLZLjolYDmDP7SzL0YfYI`

`oauth_callback_confirmed=true`

**Paso 2: [GET oauth/authorize](/es/resources/fundamentals/authentication/api-reference#get-oauth-authorize)**

Haz que el usuario se autentique y envíe a la aplicación cliente un token de solicitud.
 

**URL de ejemplo a la que redirigir al usuario:**

`https://api.x.com/oauth/authorize?oauth_token=NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0`

Tras una autenticación correcta, tu `callback_url` recibirá una solicitud que contiene los parámetros `oauth_token` y `oauth_verifier`. Tu aplicación debe verificar que el token coincida con el token de solicitud recibido en el paso 1.
 

**Solicitud desde la redirección del cliente:**

`https://yourCallbackUrl.com?oauth_token=NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0&oauth_verifier=uw7NjWHT6OJ1MpJOXsHfNxoAhPKpgI8BlYDhxEjIBY`

**Paso 3: [POST oauth/access\_token](/es/resources/fundamentals/authentication/api-reference#post-oauth-access-token)**

Convierte el token de solicitud en un token de acceso utilizable.

Para convertir el token de solicitud en un token de acceso utilizable, tu aplicación debe hacer una solicitud al endpoint [POST oauth/access\_token](/es/resources/fundamentals/authentication/api-reference#post-oauth-access-token), que contenga el valor `oauth_verifier` obtenido en el paso 2. El token de solicitud también se pasa en la parte `oauth_token` del encabezado, pero esto se habrá agregado mediante el proceso de firma.
 

**La solicitud incluye:**

`POST /oauth/access_token`

`oauth_consumer_key=cChZNFj6T5R0TigYB9yd1w`

`oauth_token=NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0`

`oauth_verifier=uw7NjWHT6OJ1MpJOXsHfNxoAhPKpgI8BlYDhxEjIBY`

Una respuesta correcta contiene los parámetros `oauth_token`, `oauth_token_secret`. El token y el token secreto deben almacenarse y usarse para futuras solicitudes autenticadas a la X API. Para determinar la identidad del usuario, usa [GET account/verify\_credentials](/es/resources/fundamentals/authentication/api-reference).
 

**La respuesta incluye:**

`oauth_token=7588892-kagSNqWge8gB1WwE3plnFsJHAZVfxWD7Vb57p0b4`

`oauth_token_secret=PbKfYqSryyeKDWz4ebtY3o5ogNLG11WJuZBc9fQrQo`

**Uso de estas credenciales para solicitudes requeridas que usan OAuth 1.0a (aplicación-usuario)**

Ahora que has obtenido los tokens de acceso de usuario, puedes usarlos para acceder a determinadas API, como [POST statuses/update](/es/x-api/posts/manage-tweets/introduction), para crear Tweets en nombre de los usuarios.
 

**La solicitud incluye:**

`POST statuses/update.json`

`oauth_consumer_key=cChZNFj6T5R0TigYB9yd1w`

`oauth_token=7588892-kagSNqWge8gB1WwE3plnFsJHAZVfxWD7Vb57p0b4`

<div id="sample-use-case">
  #### Ejemplo de caso de uso
</div>

El flujo estándar es web y utiliza el flujo de autorización OAuth de tres etapas (3-legged OAuth). Las capturas de pantalla descritas aquí forman parte de un ejemplo cuyo código fuente puedes ver en [https://github.com/xdevplatform/twauth-web](https://github.com/xdevplatform/twauth-web).

En algún momento de tu aplicación, querrás redirigir al usuario a X para que autorice tu aplicación.

<Frame>
  <img src="https://mintcdn.com/generaltranslation/p-tsc5qa00w8y5M4/images/twauth-web-2.png?fit=max&auto=format&n=p-tsc5qa00w8y5M4&q=85&s=b681c5f9dda24dc90e54ec838717c142" alt="" width="1858" height="1578" data-path="images/twauth-web-2.png" />
</Frame>

Cuando redirijas a X con el token de solicitud, se le pedirá al usuario que autorice tu aplicación.

<Frame>
  <img src="https://mintcdn.com/generaltranslation/p-tsc5qa00w8y5M4/images/twauth-web-3.png?fit=max&auto=format&n=p-tsc5qa00w8y5M4&q=85&s=b77b11d9a23b80535de949b50547c49e" alt="" width="1858" height="1578" data-path="images/twauth-web-3.png" />
</Frame>

Al autorizar tu aplicación, el usuario será redirigido a la URL de callback que proporcionaste cuando generaste el token de solicitud. Utilizarás esto para obtener el token de acceso permanente para este usuario y almacenarlo localmente.

<Frame>
  <img src="https://mintcdn.com/generaltranslation/p-tsc5qa00w8y5M4/images/twauth-web-4.png?fit=max&auto=format&n=p-tsc5qa00w8y5M4&q=85&s=b0dee4e65eaafa884b7e7c4200c1a2ee" alt="" width="1858" height="1578" data-path="images/twauth-web-4.png" />
</Frame>
