Saltar al contenido principal

Autenticación solo de App y token Bearer de OAuth 2.0

X ofrece a las aplicaciones la posibilidad de enviar solicitudes autenticadas en nombre de la propia aplicación, en lugar de hacerlo en nombre de un usuario específico. La implementación de X se basa en el flujo Client Credentials Grant de la especificación OAuth 2. La autenticación solo de aplicación no incluye contexto de usuario y es una forma de autenticación en la que una aplicación realiza solicitudes a la API en su propio nombre. Este método es para desarrolladores que solo necesitan acceso de solo lectura a información pública.  Puedes realizar autenticación solo de aplicación usando las API keys de consumidor de tus Apps o utilizando un App only Access Token (Bearer Token). Esto significa que las únicas solicitudes que puedes hacer a una X API no deben requerir un usuario autenticado. Con la autenticación solo de aplicación, puedes realizar acciones como:
  • Obtener timelines de usuarios
  • Acceder a los amigos y seguidores de cualquier cuenta
  • Acceder a recursos de listas
  • Buscar Tweets
Ten en cuenta que solo OAuth 1.0a o OAuth 2.0 Authorization Code Flow con PKCE es necesario para enviar solicitudes en nombre de los usuarios. La página de API reference describe el método de autenticación requerido para usar una API. Necesitarás autenticación de usuario y contexto de usuario, con un access token para realizar lo siguiente:
  • Publicar Tweets u otros recursos
  • Buscar usuarios
  • Usar cualquier endpoint de geolocalización
  • Acceder a Mensajes Directos o a las credenciales de la cuenta
  • Recuperar direcciones de correo electrónico del usuario

Flujo de autenticación

Para usar este método, necesitas un App only Access Token (también conocido como Bearer Token). Puedes generar un App only Access Token (Bearer Token) pasando tu consumer key y secret al endpoint POST oauth2/token. El flujo de autenticación solo de App sigue estos pasos:
  • Una App codifica su consumer key y secret en un conjunto de credenciales especialmente codificadas.
  • Una App realiza una solicitud al endpoint POST oauth2/token para intercambiar esas credenciales por un App only Access Token.
  • Al acceder a la API REST, la App usa el App only Access Token para autenticarse.
Como no es necesario firmar la solicitud, este enfoque es mucho más simple que el modelo estándar OAuth 1.0a.

Acerca de la autenticación solo de aplicación

Los tokens son contraseñas Ten en cuenta que la consumer key y la secret, así como el App only Access Token (Bearer Token), otorgan acceso para realizar solicitudes en nombre de una aplicación. Estos valores deben considerarse tan sensibles como las contraseñas y no deben compartirse ni distribuirse a partes no confiables. SSL obligatorio Todas las solicitudes (tanto para obtener como para usar los tokens) deben usar endpoints HTTPS. Sigue las prácticas recomendadas detalladas en Conexión a X API mediante TLS: los pares deben verificarse siempre. Sin contexto de usuario Al realizar solicitudes con autenticación solo de aplicación, no existe el concepto de “usuario actual”. Por lo tanto, endpoints como POST statuses/update no funcionarán con autenticación solo de aplicación. Consulta uso de OAuth para obtener más información sobre cómo realizar solicitudes en nombre de un usuario. Limitación de frecuencia Las aplicaciones tienen dos tipos de grupos de limitación de frecuencia. Las solicitudes realizadas en nombre de usuarios con tokens de acceso, también conocidas como contexto de usuario, se descuentan de un contexto de limitación de frecuencia distinto al usado en la autenticación solo de aplicación. En otras palabras, las solicitudes realizadas en nombre de usuarios no consumirán de los límites disponibles a través de la autenticación solo de aplicación, y las solicitudes realizadas mediante autenticación solo de aplicación no consumirán de los límites usados en la autenticación basada en usuario. Lee más sobre la limitación de frecuencia de la API y revisa los límites.

Emisión de solicitudes de solo App

Paso 1: Codificar la consumer key y el consumer secret Los pasos para codificar la consumer key y el consumer secret de una App en un conjunto de credenciales para obtener un Bearer Token son:
  1. Codifica la consumer key y el consumer secret en formato URL según RFC 1738. Ten en cuenta que, al momento de redactar esto, esto no cambiará realmente la consumer key ni el consumer secret, pero igualmente es conveniente realizar este paso por si el formato de esos valores cambiara en el futuro.
  2. Concatena la consumer key codificada, un carácter de dos puntos ”:” y el consumer secret codificado en una sola cadena.
  3. Codifica en Base64 la cadena del paso anterior.
A continuación se muestran valores de ejemplo que ilustran el resultado de este algoritmo. Ten en cuenta que el consumer secret utilizado en esta página es solo para fines de prueba y no funcionará para solicitudes reales.
Consumer keyxvz1evFS4wEEPTGEFPHBog
Consumer secretL8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg
RFC 1738 encoded consumer

key (does not change)
xvz1evFS4wEEPTGEFPHBog
RFC 1738 encoded consumer

secret (does not change)
L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg
Bearer Token credentialsxvz1evFS4wEEPTGEFPHBog:L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg
Base64 encoded Bearer Token credentials:: eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpMOHFxOVBaeVJnNmllS0dFS2hab2xHQzB2SldMdzhpRUo4OERSZHlPZw==
Paso 2: Obtener un App only Access Token (Bearer Token) El valor calculado en el paso 1 debe intercambiarse por un App only Access Token mediante una solicitud a POST oauth2/token:
  • La solicitud debe ser una solicitud HTTP POST.
  • La solicitud debe incluir un encabezado Authorization con el valor Basic <valor en Base64 del paso 1>.
  • La solicitud debe incluir un encabezado Content-Type con el valor application/x-www-form-urlencoded;charset=UTF-8.
  • El cuerpo de la solicitud debe ser grant_type=client_credentials.
Solicitud de ejemplo (el encabezado Authorization se ha ajustado de línea):
POST /oauth2/token HTTP/1.1
Host: api.x.com
User-Agent: Mi App de X v1.0.23
Authorization: Basic eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpMOHFxOVBaeVJn
                     NmllS0dFS2hab2xHQzB2SldMdzhpRUo4OERSZHlPZw==
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
Content-Length: 29
Accept-Encoding: gzip

grant\_type=client\_credentials
Si la solicitud está correctamente formateada, el servidor responderá con una carga útil codificada en JSON: Respuesta de ejemplo:
HTTP/1.1 200 OK
Estado: 200 OK
Tipo de contenido: application/json; charset=utf-8
...
Codificación de contenido: gzip
Longitud del contenido: 140

{"token\_type":"bearer","access\_token":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2FAAAAAAAAAAAAAAAAAAAA%3DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"}
Las aplicaciones deben verificar que el valor asociado con la clave token_type del objeto devuelto sea bearer. El valor asociado con la clave access_token es el App only Access Token (Bearer Token). Ten en cuenta que solo un App only Access Token es válido para una aplicación a la vez. Enviar otra solicitud con las mismas credenciales a /oauth2/token devolverá el mismo token hasta que se invalide. Paso 3: Autentica las solicitudes a la API con el App only Access Token (Bearer Token) El App only Access Token (Bearer Token) puede usarse para enviar solicitudes a endpoints de la API que admiten autenticación únicamente de aplicación. Para usar el App Access Token, construye una solicitud HTTPS normal e incluye un encabezado Authorization con el valor Bearer <valor del token bearer en base64 del paso 2>. No es necesario firmar. Solicitud de ejemplo (el encabezado Authorization se ha dividido en líneas):
GET /1.1/statuses/user\_timeline.json?count=100&screen\_name=twitterapi HTTP/1.1
Host: api.x.com
User-Agent: My X App v1.0.23
Authorization: Bearer AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2FAAAAAAAAAAAA
                      AAAAAAAA%3DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Accept-Encoding: gzip
Invalidación de un token de acceso solo de App (Bearer token) Si un token de acceso solo de App se ve comprometido o necesita invalidarse por cualquier motivo, haz una llamada a POST oauth2/invalidate_token. Ejemplo de solicitud (el encabezado Authorization se ha dividido en líneas):
POST /oauth2/invalidate_token HTTP/1.1
Authorization: Basic eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpMOHFxOVBaeVJn
                     NmllS0dFS2hab2xHQzB2SldMdzhpRUo4OERSZHlPZw==
User-Agent: My X App v1.0.23
Host: api.x.com
Accept: */*
Content-Length: 119
Content-Type: application/x-www-form-urlencoded

access_token=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2FAAAAAAAAAAAAAAAAAAAA%3DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Respuesta de ejemplo:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 127
...

{"access_token":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2FAAAAAAAAAAAAAAAAAAAA%3DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"}

Casos de error comunes

Esta sección describe algunos errores comunes en la negociación y el uso de Bearer Tokens. Ten en cuenta que no todas las posibles respuestas de error se incluyen aquí; presta atención a códigos y respuestas de error no controlados. Solicitudes no válidas para obtener o revocar un App only Access Token (Bearer Token) Intentos de:
  • Obtener un App only Access Token (Bearer Token) con una solicitud no válida (por ejemplo, omitiendo grant_type=client_credentials).
  • Obtener o revocar un App only Access Token (Bearer Token) con credenciales de la App incorrectas o vencidas.
  • Invalidar un App only Access Token (Bearer Token) incorrecto o ya revocado.
  • Obtener un App only Access Token (Bearer Token) con demasiada frecuencia en un periodo corto.
Darán como resultado:
HTTP/1.1 403 Prohibido
Content-Length: 105
Content-Type: application/json; charset=utf-8
...

{"errors":\[{"code":99,"label":"authenticity\_token\_error","message":"No se pudieron verificar tus credenciales"}\]}

La solicitud a la API contiene un token de acceso de solo App (Bearer token) no válido

Usar un token de acceso incorrecto o revocado para realizar solicitudes a la API dará como resultado:
HTTP/1.1 401 No autorizado
Content-Type: application/json; charset=utf-8
Content-Length: 61
...

{"errors":\[{"message":"Token no válido o caducado","code":89}\]}

Token de acceso solo de App (Bearer Token) usado en un endpoint que no admite autenticación solo de aplicación

Hacer una solicitud a un endpoint que requiere un contexto de usuario (como statuses/home_timeline) con un token de acceso solo de App (Bearer Token) producirá:
HTTP/1.1 403 Prohibido
Content-Type: application/json; charset=utf-8
Content-Length: 91
...

{"errors":[{"message":"Tus credenciales no te permiten acceder a este recurso","code":220}]}