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 de la industria que ofrece un control más preciso sobre el alcance de una aplicación y los flujos de autorización en múltiples dispositivos. OAuth 2.0 permite seleccionar ámbitos granulares que otorgan permisos específicos en nombre de un usuario. Para habilitar OAuth 2.0 en su App, debe activarlo en la configuración de autenticación de su App, ubicada en la sección de configuración de la App del portal de desarrolladores.

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

De forma predeterminada, el access token que creas mediante el Authorization Code Flow with PKCE solo será válido durante dos horas, a menos que hayas utilizado el alcance offline.access.

Tokens de actualización

Los tokens de actualización permiten que una aplicación obtenga un nuevo access token sin solicitar la intervención del usuario mediante el flujo de actualización. Si se aplica el scope offline.access, se emitirá un refresh token de OAuth 2.0. Con este refresh token, se obtiene un access token. Si este scope no se incluye, no generaremos un refresh token. Un ejemplo de la solicitud que realizaría para usar un refresh token y obtener un nuevo access token es el siguiente:
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 seleccionar que la autenticación de tu App sea OAuth 1.0a u OAuth 2.0. También puedes habilitar una App para que use tanto OAuth 1.0a como OAuth 2.0. OAuth 2.0 solo puede usarse 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 forma segura con el servidor de autorización, manteniendo a salvo tu client secret. Los clientes públicos, dado que normalmente se ejecutan 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 en el portal de desarrolladores un tipo de cliente que es confidencial, 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 bot son clientes confidenciales. No necesitas id del cliente para los clientes confidenciales cuando usas un Authorization Header válido. Aun así, se requiere incluir el Client Id en el cuerpo de las solicitudes realizadas con un cliente público. 

Scopes

Los scopes te permiten configurar accesos granulares para tu App, de modo que tu App solo tenga los permisos necesarios. Para obtener más información sobre qué scopes se corresponden con qué endpoints, consulta nuestra guía de asignación de autenticación.
ScopeDescripción
tweet.readTodos los Tweets que puedes ver, incluidos los de cuentas protegidas.
tweet.writePublicar Tweets y hacer Retweets en tu nombre.
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 en tu nombre.
offline.accessMantener la conexión 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 en tu nombre.
like.readTweets que has marcado con like y likes que puedes ver.
like.writeDar y quitar like a Tweets en tu nombre.
list.readLists, miembros de listas y seguidores de listas que has creado o de las que eres miembro, incluidas las listas privadas.
list.writeCrear y administrar Lists en tu nombre.
block.readCuentas que has bloqueado.
block.writeBloquear y desbloquear cuentas en tu nombre.
bookmark.readObtener Tweets guardados (Bookmarks) de un usuario autenticado.
bookmark.writeAgregar y quitar Bookmarks de Tweets.
media.writeSubir contenido multimedia.

Límites de velocidad

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

Tipos de grant

Solo ofrecemos authorization code con PKCE y refresh token como grant types admitidos para este lanzamiento inicial. Es posible que ofrezcamos más grant types en el futuro.

Flujo de OAuth 2.0

OAuth 2.0 utiliza un flujo similar al que estamos usando actualmente para OAuth 1.0a. Puede consultar un diagrama y una explicación detallada en nuestra documentación sobre este tema

Glosario

TérminoDescripción
Tipos de grantEl framework OAuth especifica varios tipos de grant para diferentes casos de uso y un marco para crear nuevos tipos de grant. Algunos ejemplos son authorization code, client credentials, device code y refresh token.
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úblicoClientes que no pueden usar client secrets registrados, como las aplicaciones que se ejecutan en un navegador o en un dispositivo móvil.
Flujo de authorization codeUtilizado tanto por clientes confidenciales como públicos para intercambiar un authorization code por un access token.
PKCEUna extensión del flujo de authorization code para prevenir varios ataques y permitir realizar de forma segura el intercambio OAuth desde clientes públicos.
Client IDSe encuentra en la sección de keys and tokens del portal de desarrolladores, bajo el encabezado “Client ID”. Si no lo ves, ponte en contacto directamente con nuestro equipo. El Client ID será necesario para generar la URL de authorize.
Redirect URITu URL de callback. Deberás contar con validación de coincidencia exacta.
Authorization codePermite que una aplicación llame a APIs en nombre de los usuarios. Conocido como auth_code. El auth_code tiene un límite de tiempo de 30 segundos una vez que el propietario de la App recibe un auth_code aprobado del usuario. Deberás intercambiarlo por un access token dentro de 30 segundos o el auth_code caducará.
Access tokenLos Access Tokens son el token que las aplicaciones usan para realizar solicitudes a la API en nombre de un usuario.
Refresh tokenPermite que una aplicación obtenga un nuevo access token sin solicitar intervención del usuario mediante el flujo de refresh token.
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 keys and tokens de tu App.

Parámetros

Para construir una URL de autorización de OAuth 2.0, asegúrese de incluir los siguientes parámetros en la URL de autorización. 
ParameterDescription
response_typeDebe especificar que se trata de un código con la palabra “code”.
client_idSe encuentra en el portal de desarrolladores bajo el encabezado “Client ID”.
redirect_uriSu URL de callback. Este valor debe corresponder a una de las Callback URLs definidas en la configuración de su App. Para OAuth 2.0, debe contar con validación de coincidencia exacta para su URL de callback.
stateUna cadena aleatoria que usted proporciona para protegerse contra ataques CSRF. La longitud de esta cadena puede ser de hasta 500 caracteres.
code_challengeUn parámetro PKCE, un secreto aleatorio para cada solicitud que realice.
code_challenge_methodEspecifica el método que está utilizando para realizar la solicitud (S256 o plain).

URL de autorización 

Con OAuth 2.0, generas 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 estás creando 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
Necesitas la codificación adecuada para que esta URL funcione; asegúrate de consultar nuestra documentación sobre la codificación por porcentaje.
I