Saltar al contenido principal

Flujo de código de autorización de OAuth 2.0 con PKCE

Introducción

OAuth 2.0 es un protocolo de autorización estándar del sector que permite un mayor control sobre el alcance de una aplicación y sobre los flujos de autorización en múltiples dispositivos. OAuth 2.0 te permite elegir ámbitos específicos y granulares que te otorgan permisos concretos en nombre de un usuario. Para habilitar OAuth 2.0 en tu App, debes activarlo en la configuración de Autenticación de tu App, ubicada en la sección de configuración de la App del Portal de desarrolladores.

¿Durante cuánto tiempo seguirán siendo válidas mis credenciales?  

De forma predeterminada, el token de acceso que generes mediante el Authorization Code Flow con PKCE solo será válido durante dos horas, a menos que hayas utilizado el ámbito offline.access.

Tokens de actualización

Los tokens de actualización permiten que una App obtenga un nuevo token de acceso sin requerir la intervención del usuario, mediante el flujo de actualización. Si se aplica el alcance offline.access, se emitirá un token de actualización de OAuth 2.0. Con este token de actualización, podrás obtener un token de acceso. Si este alcance no se incluye, no generaremos un token de actualización. A continuación se muestra un ejemplo de la solicitud que realizarías para usar un token de actualización y obtener un nuevo token de acceso:
POST 'https://api.x.com/2/oauth2/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'refresh_token=bWRWa3gzdnk3WHRGU1o0bmRRcTJ5VUxWX1lZTDdJSUtmaWcxbTVxdEFXcW5tOjE2MjIxNDc3NDM5MTQ6MToxOnJ0OjE' \
--data-urlencode 'grant_type=refresh_token' \
--data-urlencode 'client_id=rG9n6402A3dbUJKzXTNX4oWHJ

Configuración de la App

Puedes configurar la Autenticación de tu App como OAuth 1.0a u OAuth 2.0. También puedes habilitar que una App use tanto OAuth 1.0a como OAuth 2.0. OAuth 2.0 solo puede utilizarse con la X API v2. Si has seleccionado OAuth 2.0, podrás ver un Client ID en la sección Keys and Tokens de tu App. 

Clientes confidenciales

Los clientes confidenciales pueden mantener credenciales de forma segura sin exponerlas a partes no autorizadas y autenticarse de manera segura con el servidor de autorización, manteniendo tu client secret a salvo. Los clientes públicos, al ejecutarse normalmente en un navegador o en un dispositivo móvil, no pueden usar tus client secrets. Si seleccionas un tipo de App que sea un cliente confidencial, se te proporcionará un client secret.  Si seleccionaste un tipo de cliente confidencial en el Portal de desarrolladores, también podrás ver un Client Secret. Tus opciones son Native App, Single page App, Web App, Automated App o bot. Native App y Single page App son clientes públicos, y Web App y Automated App o bots son clientes confidenciales. No necesitas el client id para clientes confidenciales si usas un Authorization Header válido. Aun así, se requiere incluir el Client Id en el cuerpo de las solicitudes cuando se trate de un cliente público. 

Ámbitos

Los ámbitos te permiten definir accesos granulares para tu App, de modo que tu App solo tenga los permisos necesarios. Para obtener más información sobre cómo se asignan los ámbitos a los endpoints, consulta nuestra guía de asignación de Autenticación.
ÁmbitoDescripción
tweet.readTodos los Tweets que puedes ver, incluidos los de cuentas protegidas.
tweet.writePublicar Tweets y Retweets por ti.
tweet.moderate.writeOcultar y mostrar respuestas a tus Tweets.
users.emailCorreo electrónico de un usuario autenticado.
users.readCualquier cuenta que puedas ver, incluidas las cuentas protegidas.
follows.readPersonas que te siguen y personas a las que sigues.
follows.writeSeguir y dejar de seguir personas por ti.
offline.accessMantenerte conectado a tu cuenta hasta que revoques el acceso.
space.readTodos los Spaces que puedes ver.
mute.readCuentas que has silenciado.
mute.writeSilenciar y dejar de silenciar cuentas por ti.
like.readTweets que te han gustado y Me gusta que puedes ver.
like.writeIndicar y quitar Me gusta en Tweets por ti.
list.readListas, miembros de listas y seguidores de listas que has creado o de las que eres miembro, incluidas las listas privadas.
list.writeCrear y administrar Listas por ti.
block.readCuentas que has bloqueado.
block.writeBloquear y desbloquear cuentas por ti.
bookmark.readObtener Tweets guardados de un usuario autenticado.
bookmark.writeGuardar y quitar marcadores de Tweets.
media.writeSubir contenido multimedia.

Límites de uso

En la mayoría de los casos, los límites de uso son los mismos que al autenticarse con OAuth 1.0a, con la excepción de la búsqueda de Tweets y de Usuarios. Estamos aumentando el límite por App de 300 a 900 solicitudes por cada 15 minutos al usar OAuth 2.0 para la búsqueda de Tweets y de usuarios. Para obtener más información, asegúrate de consultar nuestra documentación sobre límites de uso.

Tipos de otorgamiento

Para este lanzamiento inicial, solo admitimos authorization code con PKCE y refresh token como tipos de otorgamiento compatibles. Es posible que en el futuro ofrezcamos más tipos de otorgamiento.

Flujo de OAuth 2.0

OAuth 2.0 sigue un flujo similar al que utilizamos actualmente para OAuth 1.0a. Puedes consultar un diagrama y una explicación detallada en nuestra documentación sobre este tema o en la versión en inglés documentation on this subject

Glosario

TérminoDescripción
Tipos de concesiónEl framework OAuth especifica varios tipos de concesión para diferentes casos de uso y un marco para crear nuevos tipos de concesión. Entre los ejemplos están el código de autorización, las credenciales de cliente, el código de dispositivo y el token de actualización.
Cliente confidencialLos clientes son aplicaciones que pueden autenticarse de forma segura con el servidor de autorización, por ejemplo, manteniendo a salvo su client secret registrado.
Cliente públicoLos clientes no pueden usar client secrets registrados, como las aplicaciones que se ejecutan en un navegador o en un dispositivo móvil.
Flujo de código de autorizaciónUtilizado tanto por clientes confidenciales como públicos para intercambiar un código de autorización por un token de acceso.
PKCEUna extensión del flujo de código de autorización para prevenir varios ataques y poder realizar el intercambio OAuth desde clientes públicos de forma segura.
Client IDSe encuentra en la sección de claves y tokens del Portal de desarrolladores, bajo el encabezado “Client ID”. Si no lo ves, ponte en contacto con nuestro equipo directamente. El Client ID será necesario para generar la URL de autorización.
URI de redirecciónTu URL de callback. Deberás contar con validación de coincidencia exacta.
Código de autorizaciónPermite que una aplicación acceda a las APIs en nombre de los usuarios. Conocido como el auth_code. El auth_code tiene un límite de tiempo de 30 segundos desde que el propietario de la App recibe del usuario un auth_code aprobado. Deberás intercambiarlo por un token de acceso en un plazo de 30 segundos o el auth_code expirará.
Token de accesoLos tokens de acceso son el token que las aplicaciones usan para realizar solicitudes a la API en nombre de un usuario.
Token de actualizaciónPermite que una aplicación obtenga un nuevo token de acceso sin solicitar intervención del usuario mediante el flujo de token de actualización.
Client SecretSi has seleccionado un tipo de App que sea un cliente confidencial, se te proporcionará un “Client Secret” debajo de “Client ID” en la sección de claves y tokens de tu App.

Parámetros

Para construir una URL de autorización de OAuth 2.0, asegúrate de incluir los siguientes parámetros en la URL de autorización. 
ParámetroDescripción
response_typeDebes indicar que se trata de un código usando la palabra “code”.
client_idSe encuentra en el Portal de desarrolladores, bajo el encabezado “Client ID”.
redirect_uriTu URL de retorno (callback). Este valor debe coincidir con una de las URL de retorno definidas en la configuración de tu App. Para OAuth 2.0, debes contar con validación de coincidencia exacta para tu URL de retorno.
stateUna cadena aleatoria que proporcionas para protegerte contra ataques CSRF. La longitud de esta cadena puede ser de hasta 500 caracteres.
code_challengeUn parámetro PKCE, un secreto aleatorio por cada solicitud que realices.
code_challenge_methodEspecifica el método que usas para realizar la solicitud (S256 o plain).

URL de autorización 

Con OAuth 2.0, creas una URL de autorización que puedes usar para permitir que un usuario se autentique mediante un flujo de autenticación, similar a “Iniciar sesión con X”.  Un ejemplo de la URL que vas a crear es el siguiente:
https://x.com/i/oauth2/authorize?response_type=code&client_id=M1M5R3BMVy13QmpScXkzTUt5OE46MTpjaQ&redirect_uri=https://www.example.com&scope=tweet.read%20users.read%20account.follows.read%20account.follows.write&state=state&code_challenge=challenge&code_challenge_method=plain
Deberás contar con la codificación adecuada para que esta URL funcione; asegúrate de consultar nuestra documentación sobre el percent encoding y sobre el percent encoding.